home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 23 / Amiga Format AFCD23 (Feb 1998, Issue 107).iso / +look_here_1st!+ / reader_requests / alienbreed3d2 / cheesesauce / ab3playback.s < prev    next >
Text File  |  1997-11-28  |  83KB  |  5,722 lines

  1.  
  2.  
  3. maxscrdiv EQU 8
  4. max3ddiv EQU 5
  5. playerheight EQU 12*1024
  6. scrheight EQU 80
  7.  
  8. xpos EQU 0    ;l
  9. zpos EQU 4    ;l
  10. zsinval EQU 8    ;w
  11. zcosval EQU 10    ;w
  12. ztox EQU 12    ;l
  13. xsinval EQU 16    ;w
  14. xcosval EQU 18    ;w
  15. xspd EQU 20    ;w
  16. zspd EQU 22    ;w
  17. mapx EQU 24    ;b
  18. mapz EQU 25    ;b
  19. whichtile EQU 26 ;b
  20. xofflight EQU 28    ;w
  21. zofflight EQU 30    ;w
  22. offlight EQU 32        ;w
  23. zlinestore EQU 34
  24. zlinedir EQU 38
  25. zposdir EQU 40
  26. zposstore EQU 42
  27. xdiststore EQU 44
  28. xdistdir EQU 46
  29. zwallfound EQU 48
  30.  
  31. xlinestore EQU 50
  32. xlinedir EQU 54
  33. xposdir EQU 56
  34. xposstore EQU 58
  35. zdiststore EQU 60
  36. zdistdir EQU 62
  37. xwallfound EQU 64
  38.  
  39.  
  40. midoffset EQU 104*4*40
  41.  
  42.  SECTION Scrn,CODE_C
  43. OpenLib         equ -552
  44. CloseLib        equ -414
  45.  
  46. vhposr        equ $006    
  47. vdhposrl        equ $007 
  48. bltcon0        equ $40 
  49. bltcon1        equ $42
  50. bltcpt        equ $48
  51. bltbpt        equ $4c
  52. bltapt        equ $50
  53. spr0ctl        equ $142
  54. spr1ctl        equ $14a
  55. spr2ctl        equ $152
  56. spr3ctl        equ $15a
  57. spr4ctl        equ $162
  58. spr5ctl        equ $16a
  59. spr6ctl        equ $172
  60. spr7ctl        equ $17a
  61. spr0pos        equ $140
  62. spr1pos        equ $148
  63. spr2pos        equ $150
  64. spr3pos        equ $158
  65. spr4pos        equ $160
  66. spr5pos        equ $168
  67. spr6pos        equ $170
  68. spr7pos        equ $178
  69. bltdpt         equ $54
  70. bltafwm        equ $44
  71. bltalwm        equ $46
  72. bltsize         equ $58
  73. bltcmod         equ $60
  74. bltbmod         equ $62
  75. bltamod         equ $64
  76. bltdmod         equ $66
  77. diwstart        equ $8e         ; Screen hardware registers.
  78. diwstop         equ $90
  79. ddfstart        equ $92
  80. ddfstop         equ $94
  81. bplcon0         equ $100
  82. bplcon1         equ $102
  83. col0            equ $180
  84. col1            equ $182
  85. col2        equ $184
  86. col3        equ $186
  87. col4        equ $188
  88. col5        equ $18a
  89. col6        equ $18c
  90. col7        equ $18e
  91. col8            equ $190
  92. col9            equ $192
  93. col10           equ $194
  94. dmacon        equ $96
  95. dmaconr        equ $002
  96. intenar        equ $01c
  97. intena        equ $09a
  98. intreq        equ $09c
  99. intreqr        equ $01e
  100. intreqrl    equ $01f
  101. bpl1pth         equ $e0
  102. bpl1ptl         equ $e2
  103. bpl2pth        equ $e4
  104. bpl2ptl        equ $e6
  105. bpl3pth        equ $e8
  106. bpl3ptl        equ $ea
  107. bpl4pth        equ $ec
  108. bpl4ptl        equ $ee
  109. bpl5pth        equ $f0
  110. bpl5ptl        equ $f2
  111. bpl6pth        equ $f4
  112. bpl6ptl        equ $f6
  113. bpl7pth        equ $f8
  114. bpl7ptl        equ $fa
  115. spr0pth        equ $120
  116. spr0ptl        equ $122
  117. spr1pth        equ $124
  118. spr1ptl        equ $126
  119. spr2pth        equ $128
  120. spr2ptl        equ $12a
  121. spr3pth        equ $12c
  122. spr3ptl        equ $12e
  123. spr4pth        equ $130
  124. spr4ptl        equ $132
  125. spr5pth        equ $134
  126. spr5ptl        equ $136
  127. spr6pth        equ $138
  128. spr6ptl        equ $13a
  129. spr7pth        equ $13c
  130. spr7ptl        equ $13e
  131.  
  132.  
  133. ** This waits for the blitter to finish before allowing program
  134. ** execution to continue.
  135.  
  136. WB MACRO
  137. \@bf:
  138.  btst #6,dmaconr(a6)
  139.  bne.s \@bf
  140.  ENDM
  141.  
  142. *Another version for when d6 <> dff000
  143.  
  144. WBSLOW MACRO
  145. \@bf:
  146.  btst #6,$dff000+dmaconr
  147.  bne.s \@bf
  148.  ENDM
  149.  
  150.  
  151. **
  152.  
  153.  include "macros.i"
  154.  include "ab3:source/defs.i"
  155.  
  156.  move.w (a0)+,option
  157.  move.w (a0)+,option+2
  158.  move.l #'st4k',option
  159.  
  160.  jmp stuff
  161. endstuff:
  162.  
  163.  move.l #$dff000,a6    ; NB V. IMPORTANT: A6=CUSTOM BASE
  164.  move.w #$87c0,dmacon(a6)
  165.  move.w #$8020,dmacon(a6)
  166.  move.w intenar(a6),saveinters
  167.  move.w #$7fff,intena(a6)
  168.  move.w #$00ff,$dff09e
  169.  
  170. *** Put myself in supervisor mode
  171.  
  172.  move.l #blag,$80
  173.  trap #0
  174. ; move.l $6c,d0
  175. ; move.l #blag,$6c
  176. ; move.w #$8010,intreq(a6)
  177.  
  178.  rts
  179.  
  180. saveit: ds.l 10
  181. doslibname: dc.b 'dos.library',0
  182.  even
  183. doslib: dc.l 0
  184.  
  185. LDname: dc.b 'ab3:includes/newlev.bin',0
  186.  even
  187. LDhandle: dc.l 0
  188. LGname: dc.b 'ab3:includes/newlev.graph.bin',0
  189.  even
  190. LGhandle: dc.l 0
  191. LCname: dc.b 'ab3:includes/newlev.clips',0
  192.  even
  193. LChandle: dc.l 0
  194.  
  195. blag:
  196. ; move.w #$10,intreq(a6)
  197. ; move.l d0,$6c
  198. ; move.w #$7fff,intena(a6)
  199.  
  200.  move.w #$20,$dff1dc
  201.  
  202.  move.l $6c,saveit
  203.  move.l #Chan0inter,$6c
  204.  jsr KInt_Init
  205.  
  206.  
  207.  
  208. ****************************
  209. * Initialize level
  210. ****************************
  211. * Poke all clip offsets into
  212. * correct bit of level data.
  213. ****************************
  214.  lea.l LEVELGRAPHICS,a0
  215.  move.l 12(a0),a1
  216.  add.l a0,a1
  217.  move.l a1,ZoneGraphAdds
  218.  move.l (a0),a1
  219.  add.l a0,a1
  220.  move.l a1,DoorData
  221.  move.l 4(a0),a1
  222.  add.l a0,a1
  223.  move.l a1,LiftData
  224.  move.l 8(a0),a1
  225.  add.l a0,a1
  226.  move.l a1,SwitchData
  227.  adda.w #16,a0
  228.  move.l a0,ZoneAdds
  229.  
  230.  lea.l LEVELDATA,a1
  231.  move.l 16(a1),a2
  232.  add.l a1,a2
  233.  move.l a2,Points
  234.  move.l 20(a1),a2
  235.  add.l a1,a2
  236.  move.l a2,FloorLines
  237.  move.l 24(a1),a2
  238.  add.l a1,a2
  239.  move.l a2,ObjectData
  240.  move.l 28(a1),a2
  241.  add.l a1,a2
  242.  move.l a2,PlayerShotData
  243.  move.l 32(a1),a2
  244.  add.l a1,a2
  245.  move.l a2,NastyShotData
  246.  move.l 36(a1),a2
  247.  add.l a1,a2
  248.  move.l a2,ObjectPoints  
  249.  move.l 40(a1),a2
  250.  add.l a1,a2
  251.  move.l a2,PLR1_Obj
  252.  move.l 44(a1),a2
  253.  add.l a1,a2
  254.  move.l a2,PLR2_Obj
  255.  move.w 14(a1),NumObjectPoints
  256.  
  257. ; bra noclips
  258.   
  259.  lea.l LEVELCLIPS,a2
  260.  moveq #0,d0
  261.  move.w 10(a1),d7    ;numzones
  262. assignclips:
  263.  move.l (a0)+,a3
  264.  add.l a1,a3    ; pointer to a zone
  265.  adda.w #ToListOfGraph,a3 ; pointer to zonelist
  266. dowholezone:
  267.  tst.w (a3)
  268.  blt.s nomorethiszone
  269.  tst.w 2(a3)
  270.  blt.s thisonenull
  271.  
  272.  move.l d0,d1
  273.  asr.l #2,d1
  274.  move.w d1,2(a3)
  275.  
  276. findnextclip:
  277.  tst.l (a2,d0)
  278.  beq.s foundnextclip
  279.  addq #8,d0
  280.  bra.s findnextclip
  281. foundnextclip
  282.  addq #8,d0
  283. thisonenull:
  284.  addq #8,a3 
  285.  bra.s dowholezone
  286. nomorethiszone:
  287.  dbra d7,assignclips
  288.  
  289. noclips:
  290.  
  291. ************************************
  292.  
  293.  cmp.b #'k',option+3
  294.  bne.s nkb
  295.  st PLR1KEYS
  296.  clr.b PLR1PATH
  297.  clr.b PLR1MOUSE
  298. nkb:
  299.  cmp.b #'m',option+3
  300.  bne.s nmc
  301.  clr.b PLR1KEYS
  302.  clr.b PLR1PATH
  303.  st PLR1MOUSE
  304. nmc:
  305.  cmp.b #'p',option+3
  306.  bne.s nfp
  307.  clr.b PLR1KEYS
  308.  st.b PLR1PATH
  309.  clr.b PLR1MOUSE
  310. nfp:
  311.  
  312.  move.l #empty,pos1
  313.  move.l #empty,pos2
  314.  move.l #emptyend,Samp0end
  315.  move.l #emptyend,Samp1end
  316.  
  317.  move.l #nullspr,d0
  318.  move.w d0,s0l
  319.  move.w d0,s1l
  320.  move.w d0,s2l
  321.  move.w d0,s3l
  322.  move.w d0,s4l
  323.  move.w d0,s5l
  324.  move.w d0,s6l
  325.  move.w d0,s7l
  326.  swap d0
  327.  move.w d0,s0h
  328.  move.w d0,s1h
  329.  move.w d0,s2h
  330.  move.w d0,s3h
  331.  move.w d0,s4h
  332.  move.w d0,s5h
  333.  move.w d0,s6h
  334.  move.w d0,s7h 
  335.  
  336.  move.l #Panel,d0
  337.  move.w d0,p1l
  338.  swap d0
  339.  move.w d0,p1h
  340.  move.l #Panel+80*24,d0
  341.  move.w d0,p2l
  342.  swap d0
  343.  move.w d0,p2h
  344.  move.l #Panel+80*24*2,d0
  345.  move.w d0,p3l
  346.  swap d0
  347.  move.w d0,p3h
  348.  move.l #Panel+80*24*3,d0
  349.  move.w d0,p4l
  350.  swap d0
  351.  move.w d0,p4h
  352.  move.l #Panel+80*24*4,d0
  353.  move.w d0,p5l
  354.  swap d0
  355.  move.w d0,p5h
  356.  
  357. *******************************
  358. * TIMER SCREEN SETUP
  359.  move.l #TimerScr,d0
  360.  move.w d0,p1l
  361.  swap d0
  362.  move.w d0,p1h
  363.  move.w #$9201,Panelcon
  364.  
  365.  move.l #borders,d0
  366.  move.w d0,s0l
  367.  swap d0
  368.  move.w d0,s0h
  369.  move.l #borders+2064,d0
  370.  move.w d0,s1l
  371.  swap d0
  372.  move.w d0,s1h
  373.  move.l #borders+2064*2,d0
  374.  move.w d0,s2l
  375.  swap d0
  376.  move.w d0,s2h
  377.  move.l #borders+2064*3,d0
  378.  move.w d0,s3l
  379.  swap d0
  380.  move.w d0,s3h
  381.  
  382.  move.w #42*256+80,borders
  383.  move.w #42*256+2,borders+4
  384.  move.w #42*256+80,borders+2064
  385.  move.w #42*256+130,borders+4+2064
  386.  move.w #42*256+192,borders+2064*2
  387.  move.w #42*256+2,borders+4+2064*2
  388.  move.w #42*256+192,borders+2064*3
  389.  move.w #42*256+130,borders+4+2064*3
  390.  
  391.  move.l #FacePlace,d0
  392.  move.w d0,f1l
  393.  swap d0
  394.  move.w d0,f1h
  395.  move.l #FacePlace+32*24,d0
  396.  move.w d0,f2l
  397.  swap d0
  398.  move.w d0,f2h
  399.  move.l #FacePlace+32*24*2,d0
  400.  move.w d0,f3l
  401.  swap d0
  402.  move.w d0,f3h
  403.  move.l #FacePlace+32*24*3,d0
  404.  move.w d0,f4l
  405.  swap d0
  406.  move.w d0,f4h
  407.  move.l #FacePlace+32*24*4,d0
  408.  move.w d0,f5l
  409.  swap d0
  410.  move.w d0,f5h
  411.  
  412.  move.l #Blurb,d0
  413.  move.w d0,bl1l
  414.  swap d0
  415.  move.w d0,bl1h
  416.  
  417.  move.l #PanelCop,d0
  418.  move.w d0,pcl1
  419.  move.w d0,pcl2
  420.  swap d0
  421.  move.w d0,pch1
  422.  move.w d0,pch2
  423.  
  424.  move.l #bigfield,d0
  425.  move.w d0,ocl
  426.  swap d0
  427.  move.w d0,och
  428.  
  429.  bset.b #1,$bfe001
  430.  
  431.  move.l #bigfield,$dff080    ; Point the copper at our copperlist.
  432.  move.l #$dff000,a6    ; a6 points at the first custom chip register.
  433.  move.w #$00ff,$dff09e
  434.  
  435. ; move.l #Blurbfield,$dff080
  436.  
  437.  move.w #0,d0
  438.  
  439.  move.l #scrn,d0
  440.  move.w d0,pl1l
  441.  swap d0
  442.  move.w d0,pl1h
  443.  
  444.  move.l #scrn+40,d0
  445.  move.w d0,pl2l
  446.  swap d0
  447.  move.w d0,pl2h
  448.  
  449.  move.l #scrn+80,d0
  450.  move.w d0,pl3l
  451.  swap d0
  452.  move.w d0,pl3h
  453.  
  454.  move.l #scrn+120,d0
  455.  move.w d0,pl4l
  456.  swap d0
  457.  move.w d0,pl4h
  458.  
  459.  move.l #scrn+160,d0
  460.  move.w d0,pl5l
  461.  swap d0
  462.  move.w d0,pl5h
  463.  
  464.  move.l #scrn+200,d0
  465.  move.w d0,pl6l
  466.  swap d0
  467.  move.w d0,pl6h
  468.  
  469.  move.l #scrn+240,d0
  470.  move.w d0,pl7l
  471.  swap d0
  472.  move.w d0,pl7h
  473.  
  474.  move.l #colbars,a0
  475.  move.l #colbars2,a2
  476.  move.w #scrheight-1,d0
  477.  move.l #0,d6
  478.  move.w #1,d3
  479.  move.w #$2bdf,startwait
  480.  move.w #$2d01,endwait
  481. fillcop
  482.  move.w #$180,d1
  483.  
  484.  move.l a0,a1
  485.  move.l a2,a3
  486.  move.w #$10c,(a1)+
  487.  move.w #$10c,(a3)+
  488.  move.w d3,(a1)+
  489.  move.w d3,(a3)+
  490.  eor.w #$8000,d3
  491.  
  492.  move.w #$106,(a1)+
  493.  move.w #$106,(a3)+
  494.  move.w #$2c42,d5
  495.  or.w d3,d5
  496.  and.w #$fffe,d5
  497.  move.w d5,(a1)+
  498.  move.w d5,(a3)+
  499.  bsr do32
  500.  
  501.  move.w #$106,(a1)+
  502.  move.w #$106,(a3)+
  503.  move.w #$4c42,d5
  504.  or.w d3,d5
  505.  and.w #$fffe,d5
  506.  move.w d5,(a1)+
  507.  move.w d5,(a3)+
  508.  bsr do32
  509.  
  510.  move.w #$106,(a1)+
  511.  move.w #$106,(a3)+
  512.  move.w #$6c42,d5
  513.  or.w d3,d5
  514.  and.w #$fffe,d5
  515.  move.w d5,(a1)+
  516.  move.w d5,(a3)+
  517.  bsr do32
  518.  
  519. **********************************
  520.  
  521.  cmp.b #'s',option
  522.  beq.s smallscrn
  523.  
  524.  move.w startwait,(a1)+
  525.  move.w #$fffe,(a1)+
  526.  move.w endwait,(a1)+
  527.  move.w #$ff00,(a1)+
  528.  move.w startwait,(a3)+
  529.  move.w #$fffe,(a3)+
  530.  move.w endwait,(a3)+
  531.  move.w #$ff00,(a3)+
  532.  
  533.  add.w #$300,startwait
  534.  add.w #$300,endwait
  535.  
  536. smallscrn: 
  537. **********************************
  538.  
  539.  adda.w #104*4,a0
  540.  adda.w #104*4,a2
  541.  
  542.  dbra d0,fillcop
  543.  
  544. **********************************
  545.  cmp.b #'s',option
  546.  beq smallnotlarge
  547.  move.w #$38,fetchstart
  548.  move.w #$b8,fetchstop
  549.  move.w #$2c81,winstart
  550.  move.w #$2cc1,winstop
  551.  move.w #-40,modulo
  552.  move.w #-40,modulo+4
  553.  
  554.  move.l #scrn+40,a0
  555.  move.l #scrn+160,a1
  556.  move.l #scrn+280,a2
  557.  move.l #scrntab,a3
  558.  move.w #319,d7    ; counter
  559.  move.w #0,d1    ; xpos
  560. plotscrnloop:
  561.  move.b (a3)+,d0
  562.  move.w d1,d2
  563.  asr.w #3,d2
  564.  move.b d1,d3
  565.  not.b d3
  566.  bclr.b d3,-40(a0,d2.w)
  567.  bclr.b d3,(a0,d2.w)
  568.  bclr.b d3,40(a0,d2.w)
  569.  bclr.b d3,-40(a1,d2.w)
  570.  bclr.b d3,(a1,d2.w)
  571.  bclr.b d3,40(a1,d2.w)
  572.  bclr.b d3,-40(a2,d2.w)
  573.  btst #0,d0
  574.  beq.s nobp1
  575.  bset.b d3,-40(a0,d2.w)
  576. nobp1:
  577.  btst #1,d0
  578.  beq.s nobp2
  579.  bset.b d3,(a0,d2.w)
  580. nobp2:
  581.  btst #2,d0
  582.  beq.s nobp3
  583.  bset.b d3,40(a0,d2.w)
  584. nobp3:
  585.  btst #3,d0
  586.  beq.s nobp4
  587.  bset.b d3,-40(a1,d2.w)
  588. nobp4:
  589.  btst #4,d0
  590.  beq.s nobp5
  591.  bset.b d3,(a1,d2.w)
  592. nobp5:
  593.  btst #5,d0
  594.  beq.s nobp6
  595.  bset.b d3,40(a1,d2.w)
  596. nobp6:
  597.  btst #6,d0
  598.  beq.s nobp7
  599.  bset.b d3,-40(a2,d2.w)
  600. nobp7:
  601.  
  602.  addq #1,d1
  603.  
  604.  dbra d7,plotscrnloop
  605.  
  606. smallnotlarge:
  607.  
  608. **********************************
  609.  
  610. ****************************
  611.  jsr INITPLAYER
  612. ; bsr initobjpos
  613. ****************************
  614.  
  615.  move.l #null,$dff0a0
  616.  move.w #100,$dff0a4
  617.  move.w #443,$dff0a6
  618.  move.w #63,$dff0a8
  619.  
  620.  move.l #null2,$dff0b0
  621.  move.w #100,$dff0b4
  622.  move.w #443,$dff0b6
  623.  move.w #63,$dff0b8
  624.  
  625.  move.l #null4,$dff0c0
  626.  move.w #100,$dff0c4
  627.  move.w #443,$dff0c6
  628.  move.w #63,$dff0c8
  629.  
  630.  move.l #null3,$dff0d0
  631.  move.w #100,$dff0d4
  632.  move.w #443,$dff0d6
  633.  move.w #63,$dff0d8
  634.  
  635.  move.l #tab,a1
  636.  move.w #64,d7
  637.  move.w #0,d6
  638. outerlop
  639.  move.l #pretab,a0
  640.  move.w #255,d5
  641. scaledownlop:
  642.  move.b (a0)+,d0
  643.  ext.w d0
  644.  ext.l d0
  645.  muls d6,d0
  646.  asr.l #6,d0
  647.  move.b d0,(a1)+
  648.  dbra d5,scaledownlop
  649.  addq #1,d6
  650.  dbra d7,outerlop
  651.  
  652.  move.l #$dff000,a6
  653.  
  654.  move.w #$c018,intena(a6)
  655.  
  656.  move.w #$f,dmacon(a6)
  657.  move.w #$820f,dmacon(a6)
  658.  
  659.  bsr FullEnergy
  660.  move.b #1,PLR1_GunDamage
  661.  move.b #1,PLR2_GunDamage
  662.  move.w #3,PLR1_GunNoise
  663.  move.w #3,PLR2_GunNoise
  664.  
  665. ; move.w #$20,$1dc(a6)
  666.  
  667.  move.w #$0,$dff034
  668.  move.w #0,Conditions
  669.  
  670. ; bsr PLR1_Control
  671. ; bsr objmoveanim
  672.  
  673.  clr.b somethingtodraw
  674. lop: 
  675.  
  676.  move.l #$dff000,a6
  677.  
  678.  move.l drawpt,d0
  679.  move.l olddrawpt,drawpt
  680.  move.l d0,olddrawpt
  681.  move.l d0,$dff084
  682.  move.l drawpt,a3
  683.  adda.w #10,a3
  684.  suba.w #104*4,a3
  685.  move.l a3,frompt
  686.  add.l #104*4*40,a3
  687.  move.l a3,midpt
  688.  
  689. waitfortop:
  690.  btst.b #0,intreqrl(a6)
  691.  beq waitfortop
  692.  move.w #$1,intreq(a6)
  693.  
  694.  
  695.  move.l waterpt,a0
  696.  move.l (a0)+,watertouse
  697.  cmp.l #endwaterlist,a0
  698.  blt.s okwat
  699.  move.l #waterlist,a0
  700. okwat:
  701.  move.l a0,waterpt
  702.  
  703.  add.w #640,wtan
  704.  and.w #8191,wtan
  705.  add.w #1,wateroff
  706.  and.w #63,wateroff
  707.  
  708.  JSR INITTIMER
  709.  
  710.  
  711.  move.l RECORDPTR,a0
  712.  move.w #0,TempFrames
  713.  
  714.  move.w FramesToDraw,d7
  715.  move.w #0,FramesToDraw
  716. PLAYBACKLOOP:
  717.  move.w d7,-(a7) 
  718.  
  719.  moveq #0,d7
  720.  move.b (a0),d7
  721.  move.l #KeyMap,a5
  722.  btst #0,d7
  723.  sne.b $4f(a5)
  724.  btst #1,d7
  725.  sne.b $4e(a5)
  726.  btst #2,d7
  727.  sne.b $4c(a5)
  728.  btst #3,d7
  729.  sne.b $4d(a5)
  730.  btst #4,d7
  731.  sne.b $39(a5)
  732.  btst #5,d7
  733.  sne.b $3a(a5)
  734.  btst #6,d7
  735.  sne.b $61(a5)
  736.  btst #7,d7
  737.  sne.b $65(a5)
  738.  move.b 1(a0),d7
  739.  btst #7,d7
  740.  sne.b $40(a5)
  741.  
  742.  
  743.  move.l a0,-(a7)
  744.  
  745.  jsr PLR1_keyboard_control
  746.  move.l (a7)+,a0
  747.  
  748.  move.b 3(a0),d7
  749.  and.b #$7f,d7
  750.  beq.s NOMOVEMENT
  751.  move.b d7,TempFrames+1
  752.  move.b SpaceTapped,SPCTAP
  753.  clr.b SpaceTapped
  754.  
  755.  move.l a0,-(a7)
  756.  
  757.  st somethingtodraw
  758.  bsr PLR1_Control
  759.  
  760. ; bsr PLR2_Control 
  761.  
  762. ******************************************
  763.  jsr objmoveanim
  764.  clr.b PLR1_clicked
  765.  clr.b PLR2_clicked
  766. ******************************************
  767.  
  768.  move.l ObjectPoints,a1
  769.  move.l PLR1_Obj,a0
  770.  move.b damagetaken(a0),d2
  771.  beq notbeenshot
  772.  ext.w d2
  773.  sub.w d2,Energy
  774.  move.b #0,damagetaken(a0)
  775.  move.l #Cheese,FacesPtr
  776.  move.w #3,Cheese
  777.  move.w #-1,FacesCounter
  778. notbeenshot:
  779.  move.b Energy+1,numlives(a0)
  780.  
  781.  move.l (a7)+,a0
  782.  
  783. NOMOVEMENT:
  784.  addq #2,a0
  785.  
  786.  move.w (a7)+,d7
  787.  subq #1,d7
  788.  bgt PLAYBACKLOOP
  789.  tst.b somethingtodraw
  790.  beq PLAYBACKLOOP
  791.  move.l a0,RECORDPTR
  792.  
  793.  move.l PLR1_Obj,a0
  794.  
  795.  move.w (a0),d0
  796.  move.l PLR1_xoff,(a1,d0.w*8)
  797.  move.l PLR1_zoff,4(a1,d0.w*8)
  798.  move.l PLR1_Roompt,a1
  799.  move.w (a1),12(a0)
  800.  move.l PLR1_yoff,d0
  801.  add.l #playerheight+128*24,d0
  802.  asr.l #7,d0
  803.  move.w d0,4(a0)
  804.  
  805.  move.l ObjectPoints,a1
  806.  move.l PLR2_Obj,a0
  807.  move.w (a0),d0
  808.  move.l PLR2_xoff,(a1,d0.w*8)
  809.  move.l PLR2_zoff,4(a1,d0.w*8)
  810.  move.l PLR2_Roompt,a1
  811. ************************
  812.  move.w #-1,12(a0)
  813.  move.w 10(a1),2(a0)
  814. ************************
  815.  move.l PLR2_yoff,d0
  816.  add.l #playerheight+128*24,d0
  817.  asr.l #7,d0
  818.  move.w d0,4(a0)
  819.  
  820.  
  821.  move.w #0,scaleval
  822.  
  823.  move.l PLR1_xoff,xoff
  824.  move.l PLR1_yoff,yoff
  825.  move.l PLR1_zoff,zoff
  826.  move.w PLR1_angpos,angpos
  827.  move.l PLR1_ListOfGraphRooms,ListOfGraphRooms
  828.  move.l PLR1_PointsToRotatePtr,PointsToRotatePtr
  829.  move.l PLR1_Roompt,Roompt
  830.  
  831.  move.w #0,leftclip
  832.  move.w #96,rightclip
  833.  move.w #0,deftopclip
  834.  move.w #80,defbotclip
  835.  move.w #0,topclip
  836.  move.w #80,botclip
  837. ; sub.l #10*104*4,frompt
  838. ; sub.l #10*104*4,midpt
  839.  
  840. * Subroom loop
  841.  
  842.  bsr DrawDisplay
  843.  
  844.  bra noglass
  845.  
  846. ************************************
  847. * Test glass routine:
  848. ************************************
  849.  
  850.  move.l #WorkSpace,a0
  851.  move.l frompt,a2
  852.  move.w #104*4,d3
  853.  move.w #1,d6
  854. ribl
  855.  move.w #31,d0
  856. readinto
  857.  move.w #15,d1
  858.  move.l a2,a1
  859. readintodown
  860.  move.w (a1),(a0)+
  861.  adda.w d3,a1
  862.  move.w (a1),(a0)+
  863.  adda.w d3,a1
  864.  move.w (a1),(a0)+
  865.  adda.w d3,a1
  866.  move.w (a1),(a0)+
  867.  adda.w d3,a1
  868.  dbra d1,readintodown
  869. ; add.w #256-128,a0
  870.  addq #4,a2
  871.  dbra d0,readinto
  872.  addq #4,a2
  873.  dbra d6,ribl
  874.  
  875. * We now have the screen in a buffer
  876. * for squidging.
  877.  
  878.  move.l frompt,a2
  879.  move.l #WorkSpace,a0
  880.  move.l glassballpt,a3
  881.  move.w #$fff,d7
  882.  move.w #1,d6 
  883. rfbl:
  884.  move.w #31,d0
  885. readoutfrom:
  886.  move.w #15,d1
  887.  move.l a2,a1
  888.  moveq.w #0,d5
  889. readoutfromdown:
  890.  move.w (a3)+,d2
  891.  beq.s nono1
  892. ; add.w d5,d2
  893.  move.w (a0,d2.w*2),d2
  894.  and.w d7,d2
  895.  move.w d2,(a1)
  896. nono1:
  897.  addq #1,d5
  898.  add.w d3,a1
  899.  move.w (a3)+,d2
  900.  beq.s nono2
  901. ; add.w d5,d2
  902.  move.w (a0,d2.w*2),d2
  903.  and.w d7,d2
  904.  move.w d2,(a1)
  905. nono2:
  906.  addq #1,d5
  907.  add.w d3,a1
  908.  move.w (a3)+,d2
  909.  beq.s nono3
  910. ; add.w d5,d2
  911.  move.w (a0,d2.w*2),d2
  912.  and.w d7,d2
  913.  move.w d2,(a1)
  914. nono3:
  915.  addq #1,d5
  916.  add.w d3,a1
  917.  move.w (a3)+,d2
  918.  beq.s nono4
  919. ; add.w d5,d2
  920.  move.w (a0,d2.w*2),d2
  921.  and.w d7,d2
  922.  move.w d2,(a1)
  923. nono4:
  924.  addq #1,d5
  925.  add.w d3,a1
  926.  dbra d1,readoutfromdown
  927.  addq #4,a2
  928. ; adda.w #128,a0
  929.  dbra d0,readoutfrom
  930.  addq #4,a2
  931.  dbra d6,rfbl
  932.  
  933.  move.l glassballpt,d0
  934.  add.l #64*64*2,d0
  935.  cmp.l #endglass,d0
  936.  blt notoffglass
  937.  move.l #glassball,d0
  938. notoffglass
  939.  move.l d0,glassballpt
  940.  
  941. noglass:
  942.  
  943.  tst.b PLR2
  944.  bra.s nodrawp2
  945.  
  946.  
  947.  move.l PLR2_xoff,xoff
  948.  move.l PLR2_yoff,yoff
  949.  move.l PLR2_zoff,zoff
  950.  move.w PLR2_angpos,angpos
  951.  move.l PLR2_ListOfGraphRooms,ListOfGraphRooms
  952.  move.l PLR2_PointsToRotatePtr,PointsToRotatePtr
  953.  
  954.  move.w #0,leftclip
  955.  move.w #96,rightclip
  956.  move.w #10,deftopclip
  957.  move.w #69,defbotclip
  958.  add.l #68*104*4,frompt
  959.  add.l #68*104*4,midpt
  960.  
  961.  bsr DrawDisplay
  962.  
  963.  
  964. nodrawp2:
  965.  
  966. ; move.l #brightentab,a0
  967. ; move.l frompt,a3
  968. ; adda.w #(4*33)+(104*4*20),a3
  969. ; move.w #20,d7
  970. ; move.w #20,d6
  971. ;horl:
  972. ; move.w d6,d5
  973. ; move.l a3,a1
  974. ;vertl
  975. ; move.w (a1),d0
  976. ; move.w (a0,d0.w*2),(a1)
  977. ; addq #4,a1
  978. ; dbra d5,vertl
  979. ; adda.w #104*4,a3
  980. ; dbra d7,horl
  981.  
  982.  move.l #$dff000,a6
  983.  
  984. ; move.w #$300,col0(a6)
  985.  
  986.  
  987.  btst #6,$bfe001
  988.  bne.s noend
  989. waitrel
  990.  btst #6,$bfe001
  991.  beq.s waitrel
  992.  bra end
  993. noend:
  994.  
  995.  tst.w Energy
  996.  bgt noendd
  997.  move.w #10,Energy
  998. noendd:
  999.  
  1000.  move.l RECORDPTR,a0
  1001.  sub.l #RECORDBUFFER,a0
  1002.  cmp.l #$e2d1a-$dc366,a0
  1003.  bge end
  1004.  
  1005.  JSR STOPTIMER
  1006.  
  1007.  bra lop
  1008.  
  1009. ***************************************************************************
  1010. ***************************************************************************
  1011. ****************** End of Main Loop here ********************************** 
  1012. ***************************************************************************
  1013. ***************************************************************************
  1014.  
  1015. Path:
  1016. ; incbin "testpath"
  1017. endpath:
  1018. pathpt: dc.l Path
  1019.  
  1020. PLR1KEYS: dc.b 0
  1021. PLR1PATH: dc.b 0
  1022. PLR1MOUSE: dc.b -1
  1023. somethingtodraw: dc.b 0 
  1024.  
  1025.  even
  1026.  
  1027. Bobble: dc.w 0
  1028. xwobble: dc.l 0
  1029. xwobxoff: dc.w 0
  1030. xwobzoff: dc.w 0
  1031.  
  1032. PLR1_Control:
  1033.  
  1034. ; Take a snapshot of everything.
  1035.  
  1036.  move.l PLR1_xoff,d2
  1037.  move.l d2,PLR1_oldxoff
  1038.  move.l d2,oldx
  1039.  move.l PLR1_zoff,d3
  1040.  move.l d3,PLR1_oldzoff
  1041.  move.l d3,oldz
  1042.  move.l PLR1s_xoff,d0
  1043.  move.l d0,PLR1_xoff
  1044.  move.l d0,newx
  1045.  move.l PLR1s_zoff,d1
  1046.  move.l d1,newz
  1047.  move.l d1,PLR1_zoff
  1048.  sub.l d2,d0
  1049.  sub.l d3,d1
  1050.  move.l d0,xdiff
  1051.  move.l d1,zdiff
  1052.  move.w PLR1s_sinval,PLR1_sinval
  1053.  move.w PLR1s_cosval,PLR1_cosval
  1054.  move.w PLR1s_angpos,PLR1_angpos
  1055.  move.l PLR1s_yoff,d0
  1056.  move.l #SineTable,a1
  1057.  move.w Bobble,d1
  1058.  move.w (a1,d1.w),d1
  1059.  move.w d1,d3
  1060.  ble.s notnegative
  1061.  neg.w d1
  1062. notnegative:
  1063.  add.w #16384,d1
  1064.  asr.w #5,d1
  1065.  move.w d1,d2
  1066.  add.w d1,d1
  1067.  add.w d2,d1
  1068.  ext.l d1
  1069.  add.l d1,d0
  1070.  
  1071.  asr.w #5,d3
  1072.  ext.l d3
  1073.  move.l d3,xwobble
  1074.  move.w PLR1_sinval,d1
  1075.  muls d3,d1
  1076.  move.w PLR1_cosval,d2
  1077.  muls d3,d2
  1078.  swap d1
  1079.  swap d2
  1080.  asr.w #6,d1
  1081.  move.w d1,xwobxoff
  1082.  asr.w #6,d2
  1083.  neg.w d2
  1084.  move.w d2,xwobzoff
  1085.  
  1086.  
  1087.  move.l d0,PLR1_yoff
  1088.  move.l d0,newy
  1089.  move.l #playerheight,thingheight
  1090.  move.l #40*256,StepUpVal
  1091.  
  1092.  move.l PLR1_Roompt,objroom
  1093.  move.w #%100000000,wallflags
  1094.  
  1095.  bsr MoveObject
  1096.  move.w #0,wallflags
  1097.  move.l objroom,PLR1_Roompt
  1098.  move.w newx,PLR1_xoff
  1099.  move.w newz,PLR1_zoff
  1100.  move.l PLR1_xoff,PLR1s_xoff
  1101.  move.l PLR1_zoff,PLR1s_zoff
  1102.  
  1103.  move.l PLR1_Roompt,a0
  1104.  move.l 2(a0),d0
  1105.  adda.w #ToZonePts,a0
  1106.  sub.l #playerheight,d0
  1107.  move.l d0,PLR1s_tyoff
  1108.  
  1109. ; move.l (a0),a0        ; jump to viewpoint list
  1110.  * A0 is pointing at a pointer to list of points to rotate
  1111.  move.w (a0)+,d1
  1112.  ext.l d1
  1113.  add.l PLR1_Roompt,d1
  1114.  move.l d1,PLR1_PointsToRotatePtr
  1115.  move (a0)+,backdropdraw
  1116.  move.l a0,PLR1_ListOfGraphRooms
  1117.  
  1118. *****************************************************
  1119.  
  1120.  rts
  1121.  
  1122. backdropdraw: dc.w 0
  1123.  
  1124. KeyMap: ds.b 256
  1125.  
  1126. PLR2_Control:
  1127.  move.l #SineTable,a0
  1128.  
  1129.  bsr turnleftright
  1130.  
  1131.  move.w PLR2_angspd,d1
  1132.  move.w PLR2_angpos,d0
  1133.  move.w (a0,d0.w),PLR2_sinval
  1134.  adda.w #2048,a0
  1135.  move.w (a0,d0.w),PLR2_cosval
  1136.  
  1137.  move.l PLR2_xspdval,d6
  1138.  move.l PLR2_zspdval,d7
  1139.  
  1140.  move.w PLR2_xoff,oldxoff
  1141.  move.w PLR2_zoff,oldzoff
  1142.  
  1143.  neg.l d6
  1144.  ble.s .nobug1
  1145.  asr.l #1,d6
  1146.  add.l #1,d6
  1147.  bra.s .bug1
  1148. .nobug1
  1149.  asr.l #1,d6
  1150. .bug1:
  1151.  
  1152. ; beq.s goinnowhere
  1153. ; blt.s goinfor
  1154. ; cmp.l #4*65536,d6
  1155. ; ble.s goinnowhere
  1156. ; move.l #4*65536,d6
  1157. ;goinfor:
  1158. ; cmp.l #-4*65536,d6
  1159. ; bge.s goinnowhere
  1160. ; move.l #-4*65536,d6
  1161. ;goinnowhere:
  1162.  
  1163.  neg.l d7
  1164.  ble.s .nobug2
  1165.  asr.l #1,d7
  1166.  add.l #1,d7
  1167.  bra.s .bug2
  1168. .nobug2
  1169.  asr.l #1,d7
  1170. .bug2: 
  1171.  
  1172. ; beq.s goinnowhere2
  1173. ; blt.s goinfor2
  1174. ; cmp.l #4*65536,d7
  1175. ; ble.s goinnowhere2
  1176. ; move.l #4*65536,d7
  1177. ;goinfor2:
  1178. ; cmp.l #-4*65536,d7
  1179. ; bge.s goinnowhere2
  1180. ; move.l #-4*65536,d7
  1181. ;goinnowhere2:
  1182.  
  1183.  move.w PLR2_sinval,d1
  1184.  move.w PLR2_cosval,d2
  1185.  move.w PLR2_ForwardSpd,d3
  1186.  
  1187.  muls d3,d2
  1188.  muls d3,d1
  1189.  
  1190.  sub.l d1,d6
  1191.  sub.l d2,d7
  1192.  add.l PLR2_pushx,d6
  1193.  add.l PLR2_pushz,d7 
  1194.  add.l d6,PLR2_xspdval
  1195.  add.l d7,PLR2_zspdval
  1196.  move.l PLR2_xspdval,d6
  1197.  move.l PLR2_zspdval,d7
  1198.  add.l d6,PLR2_xoff
  1199.  add.l d7,PLR2_zoff
  1200.  
  1201.  move.w PLR2_xoff,newx
  1202.  move.w PLR2_zoff,newz
  1203.  move.w oldxoff,oldx
  1204.  move.w oldzoff,oldz
  1205.  move.l PLR2_xspdval,xdiff
  1206.  move.l PLR2_zspdval,zdiff
  1207.  move.l PLR2_Roompt,objroom
  1208.  move.w #%100000000,wallflags
  1209.  bsr MoveObject
  1210.  move.w #0,wallflags
  1211.  move.l objroom,PLR2_Roompt
  1212.  move.w newx,PLR2_xoff
  1213.  move.w newz,PLR2_zoff
  1214.  
  1215.  move.l PLR2_xoff,d0
  1216.  move.l PLR2_zoff,d1
  1217.  sub.l oldxoff,d0
  1218.  sub.l oldzoff,d1
  1219.  move.l #0,PLR2_pushx
  1220.  move.l #0,PLR2_pushz
  1221.  move.l d0,PLR2_opushx
  1222.  move.l d1,PLR2_opushz
  1223.  
  1224.  move.l PLR2_Roompt,a0
  1225.  move.l 2(a0),d0
  1226.  sub.l #playerheight,d0
  1227.  move.l d0,PLR2_tyoff
  1228.  adda.w #22,a0
  1229.  
  1230. ; move.l (a0),a0        ; jump to viewpoint list
  1231.  * A0 is pointing at a pointer to list of points to rotate
  1232.  move.l (a0)+,PLR2_PointsToRotatePtr
  1233.  move.l a0,PLR2_ListOfGraphRooms
  1234.  
  1235. *****************************************************
  1236.  
  1237.  move.l PLR2_tyoff,d0
  1238.  move.l PLR2_yoff,d1
  1239.  move.l PLR2_yvel,d2
  1240.  add.l d2,d1
  1241.  add.l #1024,d2
  1242.  sub.l d1,d0
  1243.  bgt.s .shouldfall
  1244.  move.l #0,d2
  1245.  add.l d0,d1
  1246. .shouldfall:
  1247.  move.l d2,PLR2_yvel
  1248.  move.l d1,PLR2_yoff
  1249.  rts
  1250.  
  1251.  
  1252. DrawDisplay:
  1253.  
  1254.  tst.w backdropdraw
  1255.  beq.s nobackdrop
  1256.  jsr putinbackdrop
  1257. nobackdrop
  1258.  
  1259.  move.l #SineTable,a0
  1260.  move.w angpos,d0
  1261.  move.w (a0,d0.w),d6
  1262.  adda.w #2048,a0
  1263.  move.w (a0,d0.w),d7
  1264.  move.w d6,sinval
  1265.  move.w d7,cosval
  1266.  
  1267.  move.l yoff,d0
  1268.  asr.l #8,d0
  1269.  move.w d0,d1
  1270.  and.w #63,d1
  1271.  move.w d1,wallyoff
  1272.  asl.w #2,d0
  1273.  move.w d0,flooryoff
  1274.  
  1275.  move.w xoff,d6
  1276.  move.w d6,d3
  1277.  asr.w #1,d3
  1278.  add.w d3,d6
  1279.  asr.w #1,d6
  1280.  move.w d6,xoff34
  1281.  
  1282.  move.w zoff,d6
  1283.  move.w d6,d3
  1284.  asr.w #1,d3
  1285.  add.w d3,d6
  1286.  asr.w #1,d6
  1287.  move.w d6,zoff34
  1288.  
  1289.  bsr RotateLevelPts
  1290.  bsr RotateObjectPts
  1291.  bsr OrderZones
  1292.  
  1293.  move.l ListOfGraphRooms,a0
  1294.  
  1295.  move.l endoflist,a0
  1296. subroomloop:
  1297.  move.w -(a0),d7
  1298.  blt jumpoutofrooms
  1299.  
  1300. ; bsr setlrclip
  1301. ; move.w leftclip,d0
  1302. ; cmp.w rightclip,d0
  1303. ; bge subroomloop
  1304.  move.l a0,-(a7)
  1305.  move.l ZoneGraphAdds,a0
  1306.  move.l (a0,d7.w*4),a0
  1307.  add.l #LEVELGRAPHICS,a0
  1308.  move.l a0,ThisRoomToDraw
  1309.  
  1310.  move.l ListOfGraphRooms,a1
  1311.  
  1312. finditit:
  1313.  tst.w (a1)
  1314.  blt nomoretodoatall
  1315.  cmp.w (a1),d7
  1316.  beq outoffind
  1317.  adda.w #8,a1
  1318.  bra finditit
  1319.  
  1320. outoffind:
  1321.  
  1322.  move.l a1,-(a7)
  1323.  
  1324.  move.w #0,leftclip
  1325.  move.w #96,rightclip
  1326.  move.w 2(a1),d7
  1327.  blt.s outofcliplop
  1328.  move.l #LEVELCLIPS,a0
  1329.  lea (a0,d7.w*4),a0
  1330.      
  1331.  tst.l (a0)
  1332.  beq outofcliplop
  1333.  
  1334.  bsr NEWsetlrclip
  1335.  
  1336. intocliplop:        ; clips
  1337.  tst.l (a0)
  1338.  beq outofcliplop
  1339.  
  1340.  bsr NEWsetlrclip 
  1341.  bra intocliplop
  1342.  
  1343. outofcliplop:
  1344.  
  1345.  move.l ThisRoomToDraw,a0
  1346.  move.w leftclip,d0
  1347.  cmp.w #95,d0
  1348.  bge dontbothercantseeit
  1349.  move.w rightclip,d1
  1350.  blt dontbothercantseeit
  1351.  cmp.w d1,d0
  1352.  bge dontbothercantseeit
  1353.  
  1354.  bsr dothisroom
  1355.  
  1356. dontbothercantseeit:
  1357. pastemp:
  1358.  
  1359.  move.l (a7)+,a1
  1360.  move.l ThisRoomToDraw,a0
  1361.  move.w (a0),d7
  1362.  adda.w #8,a1
  1363.  bra finditit
  1364.  
  1365. nomoretodoatall:
  1366.  
  1367.  move.l (a7)+,a0
  1368.  
  1369.  bra subroomloop
  1370.  
  1371. jumpoutofrooms:
  1372.  
  1373.  rts
  1374.  
  1375. TempBuffer: ds.l 100 
  1376.  
  1377. ClipTable: ds.l 30
  1378. EndOfClipPt: dc.l 0
  1379.  
  1380. dothisroom
  1381.  
  1382.  move.w (a0)+,d0
  1383.  move.w d0,currzone
  1384.  move.l ZoneAdds,a1
  1385.  move.l (a1,d0.w*4),a1
  1386.  add.l #LEVELDATA,a1
  1387.  move.w 10(a1),ZoneBright
  1388.  
  1389. polyloop:
  1390.  move.w (a0)+,d0
  1391.  blt jumpoutofloop
  1392.  beq itsawall
  1393.  cmp.w #3,d0
  1394.  beq itsasetclip
  1395.  blt itsafloor
  1396.  cmp.w #4,d0
  1397.  beq itsanobject
  1398.  cmp.w #5,d0
  1399.  beq.s itsanarc
  1400.  cmp.w #6,d0
  1401.  beq itsalightbeam
  1402.  cmp.w #7,d0
  1403.  beq.s itswater
  1404.  cmp.w #9,d0
  1405.  ble itsachunkyfloor
  1406.  cmp.w #11,d0
  1407.  ble.s itsabumpyfloor
  1408.  cmp.w #12,d0
  1409.  beq.s itsbackdrop
  1410.  cmp.w #13,d0
  1411.  beq.s itsaseewall
  1412.  
  1413.  bra polyloop
  1414.  
  1415. itsaseewall:
  1416.  st seethru
  1417.  move.l #stripbufferthru,a1
  1418.  jsr itsawalldraw
  1419.  bra polyloop
  1420.  
  1421. itsbackdrop:
  1422.  jsr putinbackdrop
  1423.  bra polyloop
  1424.  
  1425. itswater:
  1426.  move.w #1,d0
  1427.  move.l #FloorLine,LineToUse
  1428.  st usewater
  1429.  clr.b usebumps
  1430.  jsr itsafloordraw
  1431.  bra polyloop
  1432.  
  1433. itsanarc:
  1434.  jsr CurveDraw
  1435.  bra polyloop
  1436. itsanobject:
  1437.  jsr ObjDraw
  1438.  bra polyloop
  1439. itsalightbeam:
  1440.  jsr LightDraw
  1441.  bra polyloop
  1442.  
  1443. itsabumpyfloor:
  1444.  sub.w #9,d0
  1445.  st usebumps
  1446.  st smoothbumps
  1447.  clr.b usewater
  1448.  move.l #BumpLine,LineToUse
  1449.  jsr itsafloordraw
  1450.  bra polyloop
  1451.  
  1452. itsachunkyfloor:
  1453.  subq.w #7,d0
  1454.  st usebumps
  1455.  sub.w #12,topclip
  1456. ; add.w #10,botclip
  1457.  clr.b smoothbumps
  1458.  clr.b usewater
  1459.  move.l #BumpLine,LineToUse
  1460.  jsr itsafloordraw
  1461.  add.w #12,topclip
  1462. ; sub.w #10,botclip
  1463.  bra polyloop 
  1464.  
  1465. itsafloor:
  1466.  
  1467.  move.l #FloorLine,LineToUse
  1468. * 1,2 = floor/roof
  1469.  clr.b usewater
  1470.  clr.b usebumps
  1471.  jsr itsafloordraw
  1472.  bra polyloop
  1473. itsasetclip:
  1474.  bra polyloop
  1475. itsawall:
  1476.  clr.b seethru
  1477.  move.l #stripbuffer,a1
  1478.  jsr itsawalldraw
  1479.  bra polyloop
  1480.  
  1481. jumpoutofloop:
  1482.  rts
  1483.  
  1484. ThisRoomToDraw: dc.l 0
  1485.  
  1486.  include "ab3:source/OrderZones"
  1487.  
  1488. ReadMouse:
  1489.  clr.l d0
  1490.  clr.l d1
  1491.  move.w $a(a6),d0
  1492.  lsr.w #8,d0
  1493.  ext.l d0
  1494.  move.w d0,d3
  1495.  move.w oldy,d2
  1496.  sub.w d2,d0
  1497.  
  1498.  cmp.w #127,d0
  1499.  blt nonegy
  1500.  move.w #255,d1
  1501.  sub.w d0,d1
  1502.  move.w d1,d0
  1503.  neg.w d0
  1504. nonegy:
  1505.  
  1506.  cmp.w #-127,d0
  1507.  bge nonegy2
  1508.  move.w #255,d1
  1509.  add.w d0,d1
  1510.  move.w d1,d0
  1511. nonegy2:
  1512.  
  1513.  add.b d0,d2
  1514.  add.w d0,oldy2
  1515.  move.w d2,oldy
  1516.  move.w d2,d0
  1517.  
  1518.  move.w oldy2,d0
  1519.  move.w d0,ymouse
  1520.  
  1521.  clr.l d0
  1522.  clr.l d1
  1523.  move.w $a(a6),d0
  1524.  ext.w d0
  1525.  ext.l d0
  1526.  move.w d0,d3
  1527.  move.w oldmx,d2
  1528.  sub.w d2,d0
  1529.  
  1530.  cmp.w #127,d0
  1531.  blt nonegx
  1532.  move.w #255,d1
  1533.  sub.w d0,d1
  1534.  move.w d1,d0
  1535.  neg.w d0
  1536. nonegx:
  1537.  
  1538.  cmp.w #-127,d0
  1539.  bge nonegx2
  1540.  move.w #255,d1
  1541.  add.w d0,d1
  1542.  move.w d1,d0
  1543. nonegx2:
  1544.  
  1545.  add.b d0,d2
  1546.  move.w d0,d1
  1547.  move.w d2,oldmx
  1548.  
  1549.  
  1550.  move.w #$0,$dff034
  1551.  btst #2,$dff016
  1552.  beq.s noturn
  1553.  
  1554.  add.w d0,oldx2
  1555.  move.w oldx2,d0
  1556.  and.w #2047,d0
  1557.  move.w d0,oldx2
  1558.  
  1559.  asl.w #2,d0
  1560.  sub.w prevx,d0
  1561.  add.w d0,prevx
  1562.  add.w d0,PLR1s_angpos
  1563.  move.w #0,lrs
  1564.  rts
  1565.  
  1566. noturn:
  1567.  
  1568. ; got to move lr instead. 
  1569.  
  1570. ; d1 = speed moved l/r
  1571.  
  1572.  move.w d1,lrs
  1573.  
  1574.  rts
  1575.  
  1576. lrs: dc.w 0
  1577. prevx: dc.w 0
  1578.  
  1579. mang: dc.w 0
  1580. oldymouse: dc.w 0
  1581. xmouse: dc.w 0
  1582. ymouse: dc.w 0
  1583. oldx2: dc.w 0
  1584. oldmx: dc.w 0
  1585. oldy: dc.w 0
  1586. oldy2: dc.w 0
  1587.  
  1588. RotateLevelPts:
  1589.  
  1590.  move.w sinval,d6
  1591.  swap d6
  1592.  move.w cosval,d6
  1593.  
  1594.  move.l PointsToRotatePtr,a0
  1595.  move.l Points,a3
  1596.  move.l #Rotated,a1
  1597.  move.l #OnScreen,a2
  1598.  move.w xoff,d4
  1599.  move.w zoff,d5
  1600.  
  1601. ; move.w #$c40,$dff106
  1602. ; move.w #$f00,$dff180
  1603.  
  1604. pointrotlop:
  1605.  move.w (a0)+,d7
  1606.  blt.s outofpointrot
  1607.  
  1608.  move.w (a3,d7*4),d0
  1609.  sub.w d4,d0
  1610.  move.w d0,d2
  1611.  move.w 2(a3,d7*4),d1
  1612.  sub.w d5,d1
  1613.  muls d6,d2
  1614.  swap d6
  1615.  move.w d1,d3
  1616.  muls d6,d3
  1617.  sub.l d3,d2
  1618.  add.l d2,d2
  1619.  swap d2
  1620.  ext.l d2
  1621.  asl.l #7,d2
  1622.  add.l xwobble,d2
  1623.  move.l d2,(a1,d7*8)
  1624.  
  1625.  muls d6,d0
  1626.  swap d6
  1627.  muls d6,d1
  1628.  add.l d0,d1
  1629.  asl.l #2,d1
  1630.  swap d1
  1631.  move.l d1,4(a1,d7*8)
  1632.  
  1633.  tst.w d1
  1634.  bgt.s ptnotbehind
  1635.  tst.w d2
  1636.  bgt.s onrightsomewhere
  1637.  move.w #0,d2
  1638.  bra putin
  1639. onrightsomewhere:
  1640.  move.w #96,d2
  1641.  bra putin
  1642. ptnotbehind:
  1643.  
  1644.  divs d1,d2
  1645.  add.w #47,d2
  1646. putin:
  1647.  move.w d2,(a2,d7*2)
  1648.  
  1649.  bra pointrotlop
  1650. outofpointrot:
  1651.  
  1652. ; move.w #$c40,$dff106
  1653. ; move.w #$ff0,$dff180
  1654.  
  1655.  rts
  1656.  
  1657. RotateObjectPts:
  1658.  
  1659.  move.w sinval,d5
  1660.  move.w cosval,d6
  1661.  
  1662.  move.l ObjectPoints,a0
  1663.  move.w NumObjectPoints,d7
  1664.  move.l #ObjRotated,a1
  1665.  move.l #ObsInLine,a2
  1666. objpointrotlop:
  1667.  
  1668.  move.w (a0),d0
  1669.  sub.w xoff,d0
  1670.  move.w 4(a0),d1
  1671.  addq #8,a0
  1672.  sub.w zoff,d1
  1673.  move.w d0,d2
  1674.  muls d6,d2
  1675.  move.w d1,d3
  1676.  muls d5,d3
  1677.  sub.l d3,d2
  1678.  add.l d2,d2
  1679.  swap d2
  1680.  move.w d2,(a1)+
  1681.  
  1682.  muls d5,d0
  1683.  muls d6,d1
  1684.  add.l d0,d1
  1685.  asl.l #2,d1
  1686.  swap d1
  1687.  moveq #0,d3
  1688.  
  1689.  move.w d1,(a1)+
  1690.  ext.l d2
  1691.  asl.l #7,d2
  1692.  add.l xwobble,d2
  1693.  move.l d2,(a1)+
  1694.  sub.l xwobble,d2
  1695.  tst.w d1
  1696.  ble.s notinline
  1697.  
  1698.  cmp.l #-60*128,d2
  1699.  blt.s notinline
  1700.  cmp.l #60*128,d2
  1701.  sle d3
  1702. notinline
  1703.  move.b d3,(a2)+
  1704.  
  1705.  dbra d7,objpointrotlop
  1706.  
  1707.  rts
  1708.  
  1709. LightDraw:
  1710.  
  1711.  move.w (a0)+,d0
  1712.  move.w (a0)+,d1
  1713.  move.l #Rotated,a1
  1714.  move.w 6(a1,d0.w*8),d2
  1715.  ble.s oneendbehind
  1716.  move.w 6(a1,d1.w*8),d3
  1717.  bgt.s bothendsinfront
  1718.  
  1719. oneendbehind:
  1720.  rts
  1721. bothendsinfront:
  1722.  
  1723.  move.l #OnScreen,a2
  1724.  move.w (a2,d0.w*2),d0
  1725.  bge.s okleftend
  1726.  moveq #0,d0
  1727. okleftend:
  1728.  move.w (a2,d1.w*2),d1
  1729.  bgt.s somevis
  1730.  rts
  1731. somevis:
  1732.  cmp.w #95,d0
  1733.  ble.s somevis2
  1734.  rts
  1735. somevis2:
  1736.  cmp.w #95,d1
  1737.  ble.s okrightend
  1738.  move.w #95,d1
  1739. okrightend:
  1740.  
  1741.  sub.w d0,d1
  1742.  blt.s wrongbloodywayround
  1743.  move.l #brightentab,a4
  1744.  move.l #objintocop,a1
  1745.  lea (a1,d0.w*2),a1
  1746.  
  1747.  move.l frompt,a3
  1748.  move.w #104*4,d6
  1749.  move.w #79,d2
  1750. lacross:
  1751.  move.w d2,d3
  1752.  move.l a3,a2
  1753.  adda.w (a1)+,a2
  1754. ldown:
  1755.  add.w d6,a2
  1756.  move.w (a2),d7
  1757.  move.w (a4,d7.w*2),(a2)
  1758.  dbra d3,ldown
  1759.  dbra d1,lacross
  1760.  
  1761. wrongbloodywayround:
  1762.  
  1763.  rts
  1764.  
  1765. FaceToPlace: dc.w 0
  1766.  
  1767. Cheese:
  1768.  dc.w 4,15
  1769.  
  1770. FacesList:
  1771.  dc.w 0,4*4
  1772.  dc.w 1,2*4
  1773.  dc.w 0,2*4
  1774.  dc.w 2,2*4
  1775.  dc.w 0,2*4
  1776.  dc.w 1,3*4
  1777.  dc.w 0,2*4
  1778.  dc.w 2,3*4
  1779.  dc.w 0,5*4
  1780.  dc.w 1,2*4
  1781.  dc.w 0,2*4
  1782.  dc.w 2,2*4
  1783.  dc.w 0,2*4
  1784.  dc.w 1,2*4
  1785.  dc.w 0,2*4
  1786.  dc.w 2,3*4
  1787.  dc.w 0,1*4
  1788.  dc.w 1,3*4
  1789.  dc.w 0,1*4
  1790.  dc.w 2,3*4
  1791.  dc.w 0,1*4
  1792.  
  1793. EndOfFacesList:
  1794.  
  1795. FacesPtr:
  1796.  dc.l FacesList
  1797. FacesCounter:
  1798.  dc.w 0
  1799. Expression:
  1800.  dc.w 0
  1801.  
  1802. PlaceFace:
  1803.  
  1804.  move.w FacesCounter,d0
  1805.  subq #1,d0
  1806.  bgt.s NoNewFace
  1807.  
  1808.  move.l FacesPtr,a0
  1809.  
  1810.  move.w 2(a0),d0
  1811.  move.w (a0),Expression
  1812.  addq #4,a0
  1813.  cmp.l #EndOfFacesList,a0
  1814.  blt.s NotFirstFace
  1815.  
  1816.  move.l #FacesList,a0
  1817.  
  1818. NotFirstFace
  1819.  move.l a0,FacesPtr
  1820.  
  1821. NoNewFace:
  1822.  
  1823.  move.w d0,FacesCounter
  1824.  
  1825.  Move.w FaceToPlace,d0
  1826.  muls #5,d0
  1827.  add.w Expression,d0
  1828.  move.l #FacePlace+10,a0
  1829.  move.l #Faces,a1
  1830.  muls #(4*32*5),d0
  1831.  adda.w d0,a1
  1832.  move.w #4,d0
  1833.  move.w #24,d1
  1834.  
  1835.  move.w #4,d3
  1836. bitplaneloop:
  1837.  move.w #31,d2
  1838. PlaceFaceToPlaceInFacePlaceLoop:
  1839.  move.l (a1),(a0)
  1840.  adda.w d0,a1
  1841.  adda.w d1,a0
  1842.  dbra d2,PlaceFaceToPlaceInFacePlaceLoop
  1843.  dbra d3,bitplaneloop
  1844.  
  1845.  rts
  1846.  
  1847. Energy:
  1848.  dc.w 191
  1849. OldEnergy:
  1850.  dc.w 191
  1851.  
  1852. FullEnergy:
  1853.  move.w #191,Energy
  1854.  move.w #191,OldEnergy
  1855.  rts
  1856.  
  1857. EnergyBar:
  1858.  
  1859.  move.w Energy,d0
  1860.  move.w #192,d1
  1861.  sub.w d0,d1
  1862.  ext.l d1
  1863.  divs #39,d1
  1864.  move.w d1,FaceToPlace
  1865.  cmp.w OldEnergy,d0
  1866.  bne.s gottochange
  1867.  
  1868. NoChange
  1869.  rts
  1870.  
  1871. gottochange:
  1872.   
  1873.  blt LessEnergy
  1874.  cmp.w #191,Energy
  1875.  blt.s NotMax
  1876.  move.w #191,Energy
  1877. NotMax:
  1878.  
  1879.  move.w Energy,d0
  1880.  move.w OldEnergy,d2
  1881.  sub.w d0,d2
  1882.  beq.s NoChange
  1883.  neg.w d2
  1884.  
  1885.  move.w OldEnergy,d3
  1886.  
  1887.  move.l #Panel+41*24,a0
  1888. EnergyRise:
  1889.  move.w d3,d0
  1890.  move.b d0,d1
  1891.  not.b d1
  1892.  and.b #7,d1
  1893.  beq.s noplot
  1894.  asr.w #3,d0
  1895.  lea (a0,d0.w),a1
  1896.  bset.b d1,(a1)
  1897.  bset.b d1,24(a1)
  1898.  bset.b d1,24*2(a1)
  1899.  bset.b d1,24*3(a1)
  1900.  bset.b d1,24*4(a1)
  1901.  bset.b d1,24*5(a1)
  1902. noplot:
  1903.  addq #1,d3
  1904.  subq #1,d2
  1905.  bgt.s EnergyRise
  1906.  
  1907.  move.w Energy,OldEnergy
  1908.  
  1909.  rts 
  1910.  
  1911.  
  1912. LessEnergy: 
  1913.  move.w OldEnergy,d2
  1914.  sub.w d0,d2
  1915.  
  1916.  move.w OldEnergy,d3
  1917.  
  1918.  move.l #Panel+41*24,a0
  1919. EnergyDrain:
  1920.  move.w d3,d0
  1921.  move.b d0,d1
  1922.  not.b d1
  1923.  asr.w #3,d0
  1924.  lea (a0,d0.w),a1
  1925.  bclr.b d1,(a1)
  1926.  bclr.b d1,24(a1)
  1927.  bclr.b d1,24*2(a1)
  1928.  bclr.b d1,24*3(a1)
  1929.  bclr.b d1,24*4(a1)
  1930.  bclr.b d1,24*5(a1)
  1931.  subq #1,d3
  1932.  subq #1,d2
  1933.  bgt.s EnergyDrain
  1934.  
  1935.  move.w Energy,OldEnergy
  1936.  
  1937.  rts 
  1938.  
  1939. end:
  1940.  jmp closeeverything 
  1941.  
  1942. do32:
  1943.  move.w #31,d7
  1944.  move.w #$180,d1
  1945. across:
  1946.  move.w d1,(a1)+
  1947.  move.w d1,(a3)+
  1948.  move.w #0,(a1)+
  1949.  move.w #0,(a3)+
  1950.  add.w #2,d1
  1951.  dbra d7,across
  1952.  rts
  1953.  
  1954.  
  1955.  
  1956. *************************************
  1957. * Set left and right clip values
  1958. *************************************
  1959.  
  1960.  
  1961.  
  1962. NEWsetlrclip:
  1963.  move.l #OnScreen,a1
  1964.  move.l #Rotated,a2
  1965.  
  1966.  move.w (a0),d0
  1967.  bge.s .notignoreleft
  1968.  
  1969. ; move.l #0,(a6)
  1970.  
  1971.  bra .leftnotoktoclip
  1972. .notignoreleft:
  1973.  
  1974.  move.w 6(a2,d0*8),d3    ; left z val
  1975.  bgt.s .leftclipinfront
  1976.  
  1977.  move.w 4(a0),d0
  1978.  blt.s .ignoreboth
  1979.  tst.w 6(a2,d0*8)
  1980.  bgt.s .leftnotoktoclip
  1981. .ignoreboth:
  1982. ; move.l #0,(a6)
  1983. ; move.l #96*65536,4(a6)
  1984.  move.w #0,leftclip
  1985.  move.w #96,rightclip
  1986.  addq #8,a6
  1987.  addq #8,a0
  1988.  rts
  1989.  
  1990. .leftclipinfront:
  1991.  move.w (a1,d0*2),d1    ; left x on screen
  1992.  move.w 2(a0),d2
  1993.  move.w (a1,d2.w*2),d2
  1994.  cmp.w d1,d2
  1995.  bgt.s .leftnotoktoclip
  1996.  
  1997. ; move.w d1,(a6)
  1998. ; move.w d3,2(a6)
  1999.  cmp.w leftclip(pc),d1
  2000.  ble.s .leftnotoktoclip
  2001.  move.w d1,leftclip
  2002. .leftnotoktoclip:
  2003.  
  2004.  move.w 4(a0),d0
  2005.  bge.s .notignoreright
  2006. ; move.w #96,4(a6)
  2007. ; move.w #0,6(a6)
  2008.  move.w #0,d4
  2009.  bra .rightnotoktoclip
  2010. .notignoreright:
  2011.  move.w 6(a2,d0*8),d4    ; right z val
  2012.  bgt.s .rightclipinfront
  2013. ; move.w #96,4(a6)
  2014. ; move.w #0,6(a6)
  2015.  bra.s .rightnotoktoclip
  2016.  
  2017. .rightclipinfront:
  2018.  move.w (a1,d0*2),d1    ; right x on screen
  2019.  move.w 6(a0),d2
  2020.  move.w (a1,d2.w*2),d2
  2021.  cmp.w d1,d2
  2022.  blt.s .rightnotoktoclip
  2023. ; move.w d1,4(a6)
  2024. ; move.w d4,6(a6)
  2025.  
  2026.  cmp.w rightclip(pc),d1
  2027.  bge.s .rightnotoktoclip
  2028.  addq #1,d1
  2029.  move.w d1,rightclip
  2030. .rightnotoktoclip:
  2031.  addq #8,a6
  2032.  addq #8,a0
  2033.  rts
  2034.  
  2035. FIRSTsetlrclip:
  2036.  move.l #OnScreen,a1
  2037.  move.l #Rotated,a2
  2038.  
  2039.  move.w (a0)+,d0
  2040.  bge.s .notignoreleft
  2041.  bra .leftnotoktoclip
  2042. .notignoreleft:
  2043.  
  2044.  move.w 6(a2,d0*8),d3    ; left z val
  2045.  bgt.s .leftclipinfront
  2046.  
  2047.  move.w (a0),d0
  2048.  blt.s .ignoreboth
  2049.  tst.w 6(a2,d0*8)
  2050.  bgt.s .leftnotoktoclip
  2051. .ignoreboth
  2052.  move.w #96,rightclip
  2053.  move.w #0,leftclip
  2054.  addq #2,a0
  2055.  rts
  2056.  
  2057. .leftclipinfront:
  2058.  move.w (a1,d0*2),d1    ; left x on screen
  2059.  cmp.w leftclip(pc),d1
  2060.  ble.s .leftnotoktoclip
  2061.  move.w d1,leftclip
  2062. .leftnotoktoclip:
  2063.  
  2064.  move.w (a0)+,d0
  2065.  bge.s .notignoreright
  2066.  move.w #0,d4
  2067.  bra .rightnotoktoclip
  2068. .notignoreright:
  2069.  move.w 6(a2,d0*8),d4    ; right z val
  2070.  ble.s .rightnotoktoclip
  2071.  
  2072. .rightclipinfront:
  2073.  move.w (a1,d0*2),d1    ; right x on screen
  2074.  cmp.w rightclip(pc),d1
  2075.  bge.s .rightnotoktoclip
  2076.  addq #1,d1
  2077.  move.w d1,rightclip
  2078. .rightnotoktoclip:
  2079.  
  2080. ; move.w leftclip,d0
  2081. ; move.w rightclip,d1
  2082. ; cmp.w d0,d1
  2083. ; bge.s .noswap
  2084. ; move.w #96,rightclip
  2085. ; move.w #0,leftclip
  2086. ;.noswap:
  2087.  
  2088.  rts
  2089.  
  2090.  
  2091. leftclip2: dc.w 0
  2092. rightclip2: dc.w 0
  2093. ZoneBright: dc.w 0
  2094.  
  2095. npolys: dc.w 0
  2096.  
  2097. PLR1_fire: dc.b 0
  2098. PLR2_fire: dc.b 0
  2099.  
  2100. turnleftright:
  2101.  
  2102.  move.w PLR2_angspd,d1
  2103.  move.w PLR2_angpos,d0
  2104.  
  2105.  move.w #120,d7
  2106.  muls TempFrames,d7
  2107.  
  2108.  move.w d1,d2
  2109.  neg.w d2
  2110.  cmp.w d7,d2
  2111.  ble.s okslow
  2112.  move.w d7,d2
  2113. okslow
  2114.  neg.w d7
  2115.  cmp.w d7,d2
  2116.  bge.s okslo
  2117.  move.w d7,d2
  2118. okslo:
  2119.  
  2120.  asr.w #1,d7
  2121.  
  2122.  btst #1,$d(a6)
  2123.  sne d3
  2124.  beq.s notleft
  2125.  move.w d7,d2
  2126.  neg.w d2
  2127. ; tst.w d1
  2128. ; bge.s notleft
  2129. ; moveq #0,d1
  2130. notleft
  2131.  
  2132.  btst #1,$c(a6)
  2133.  sne d4
  2134.  beq.s notright
  2135.  move.w d7,d2
  2136. ; tst.w d1
  2137. ; ble.s notright
  2138. ; moveq #0,d1
  2139. notright
  2140.  
  2141.  move.w #0,PLR2_ForwardSpd
  2142.  
  2143.  btst #0,$dff00c
  2144.  sne d5
  2145.  eor.b d4,d5
  2146.  beq.s notup
  2147.  move.w TempFrames,d7
  2148.  neg.w d7
  2149.  asl.w #2,d7
  2150.  move.w d7,PLR2_ForwardSpd
  2151. notup:
  2152.  
  2153.  btst #0,$dff00d
  2154.  sne d5
  2155.  eor.b d3,d5
  2156.  beq.s notdown
  2157.  move.w TempFrames,d7
  2158.  asl.w #2,d7
  2159.  move.w d7,PLR2_ForwardSpd
  2160. notdown:
  2161.  
  2162.  add.w d2,d1
  2163.  cmp.w #-360,d1
  2164.  bge.s okspdlft
  2165.  move.w #-360,d1
  2166. okspdlft:
  2167.  cmp.w #360,d1
  2168.  ble.s okspdrgt
  2169.  move.w #360,d1
  2170. okspdrgt:
  2171.  
  2172.  move.w d1,PLR2_angspd
  2173.  add.w d1,d0
  2174.  and.w #8191,d0
  2175.  move.w d0,PLR2_angpos
  2176.  rts
  2177.  
  2178. *****************************************************
  2179.  
  2180.  include "ab3:source/ObjectMove"
  2181.  
  2182. pastdata:
  2183. ***********************************
  2184. * This routine animates brightnesses.
  2185.  
  2186.  
  2187. liftpt: dc.l liftanimtab
  2188.  
  2189. brightpt:
  2190.  dc.l brightanimtab
  2191.  
  2192. liftanim:
  2193.  rts
  2194.  
  2195. ******************************
  2196.  include "ab3:source/Anims"
  2197. ******************************
  2198.  
  2199. rotanimpt: dc.w 0
  2200. xradd: dc.w 5
  2201. yradd: dc.w 8
  2202. xrpos: dc.w 320
  2203. yrpos: dc.w 320
  2204.  
  2205. rotanim:
  2206.  rts
  2207.  
  2208. option:
  2209.  dc.l 0
  2210.  
  2211. ********** WALL STUFF *******************************
  2212.  
  2213.  include "AB3:source/wallroutine3.chipmem"
  2214.  
  2215. *****************************************************
  2216.  
  2217. ******************************************
  2218. * floor polygon
  2219.  
  2220. numsidestd: dc.w 0
  2221. bottomline: dc.w 0
  2222.  
  2223. NewCornerBuff:
  2224.  ds.l 100
  2225.  
  2226. itsafloordraw:
  2227.  
  2228. * If D0 =1 then its a floor otherwise (=2) it's
  2229. * a roof.
  2230.  
  2231.  move.w #0,above
  2232.  move.w (a0)+,d6    ; ypos of poly
  2233.  
  2234.  move.w leftclip(pc),d7
  2235.  cmp.w rightclip(pc),d7
  2236.  bge.s dontdrawreturn
  2237.  
  2238.  move.w botclip,d7
  2239.  sub.w #40,d7
  2240.  ble.s dontdrawreturn
  2241.  sub.w flooryoff,d6
  2242.  bgt.s below
  2243.  blt.s aboveplayer
  2244. dontdrawreturn:
  2245.  move.w (a0)+,d6    ; sides-1
  2246.  add.w d6,d6
  2247.  add.w d6,a0
  2248.  add.w #4+6,a0
  2249.  rts
  2250. aboveplayer:
  2251.  cmp.w #2,d0
  2252.  bne.s dontdrawreturn
  2253.  move.w #40,d7
  2254.  sub.w topclip,d7 
  2255.  blt.s dontdrawreturn
  2256.  move.w #1,d0
  2257.  move.w d0,above
  2258.  neg.w d6
  2259. below:
  2260.  cmp.w #1,d0
  2261.  bne.s dontdrawreturn
  2262.  move.w d6,distaddr
  2263.  muls #64,d6
  2264.  move.l d6,ypos
  2265.  divs d7,d6        ; zpos of bottom
  2266.             ; visible line
  2267.  move.w d6,minz
  2268.  move.w d7,bottomline
  2269.  
  2270. ; Go round each point finding out
  2271. ; if it should be visible or not.
  2272.  
  2273.  move.l a0,-(a7)
  2274.  
  2275.  move.w (a0)+,d7    ; number of sides
  2276.  move.l #Rotated,a1
  2277.  move.l #OnScreen,a2
  2278.  move.l #NewCornerBuff,a3
  2279.  moveq #0,d4
  2280.  moveq #0,d5
  2281.  moveq #0,d6
  2282.  clr.b anyclipping
  2283.  
  2284. cornerprocessloop:
  2285.  
  2286.  move.w (a0)+,d0
  2287.  move.w 6(a1,d0.w*8),d1
  2288.  ble  .canttell
  2289.  
  2290.  move.w (a2,d0.w*2),d3
  2291.  cmp.w leftclip,d3
  2292.  bgt.s .nol
  2293.  st d4
  2294.  st anyclipping
  2295.  bra.s .nos
  2296. .nol:
  2297.  cmp.w rightclip,d3
  2298.  blt.s .nor
  2299.  st d6
  2300.  st anyclipping
  2301.  bra.s .nos
  2302. .nor:
  2303.  st d5
  2304. .nos:
  2305.  bra .cantell
  2306.  
  2307. .canttell:
  2308.  st d5
  2309.  st anyclipping
  2310.  
  2311. .cantell:
  2312.  
  2313.  
  2314.  dbra d7,cornerprocessloop
  2315.  
  2316.  move.l (a7)+,a0
  2317.  tst.b d5
  2318.  bne.s somefloortodraw
  2319.  eor.b d4,d6
  2320.  bne dontdrawreturn
  2321.  
  2322. somefloortodraw:
  2323.  
  2324.  move.w #80,top
  2325.  move.w #-1,bottom
  2326.  move.w #0,drawit
  2327.  move.l #Rotated,a1
  2328.  move.l #OnScreen,a2
  2329.  move.w (a0)+,d7    ; no of sides
  2330. sideloop:
  2331.  move.w minz,d6
  2332.  move.w (a0)+,d1
  2333.  move.w (a0),d3
  2334.  move.w 6(a1,d1*8),d4    ;first z
  2335.  cmp.w d6,d4
  2336.  bgt firstinfront
  2337.  move.w 6(a1,d3*8),d5    ; sec z
  2338.  cmp.w d6,d5
  2339.  ble bothbehind
  2340. ** line must be on left and partially behind.
  2341.  sub.w d5,d4
  2342.  move.l (a1,d1*8),d0
  2343.  sub.l (a1,d3*8),d0
  2344.  asr.l #7,d0
  2345.  sub.w d5,d6
  2346.  muls d6,d0    ; new x coord
  2347.  divs d4,d0
  2348.  ext.l d0
  2349.  asl.l #7,d0
  2350.  
  2351.  add.l (a1,d3*8),d0
  2352.  move.w minz,d4
  2353.  move.w (a2,d3*2),d2
  2354.  divs d4,d0
  2355.  add.w #47,d0
  2356.  move.l ypos,d3
  2357.  divs d5,d3
  2358.  move.w bottomline,d1 
  2359.  bra lineclipped
  2360.  
  2361. firstinfront:
  2362.  move.w 6(a1,d3*8),d5    ; sec z
  2363.  cmp.w d6,d5
  2364.  bgt bothinfront
  2365. ** line must be on right and partially behind.
  2366.  sub.w d4,d5    ; dz
  2367.  move.l (a1,d3*8),d2
  2368.  sub.l (a1,d1*8),d2    ; dx
  2369.  sub.w d4,d6
  2370.  asr.l #7,d2
  2371.  muls d6,d2    ; new x coord
  2372.  divs d5,d2
  2373.  ext.l d2
  2374.  asl.l #7,d2
  2375.  add.l (a1,d1*8),d2
  2376.  move.w minz,d5
  2377.  move.w (a2,d1*2),d0
  2378.  divs d5,d2
  2379.  add.w #47,d2
  2380.  move.l ypos,d1
  2381.  divs d4,d1
  2382.  move.w bottomline,d3 
  2383.  bra lineclipped
  2384.  
  2385. bothinfront:
  2386.  
  2387. * Also, usefully enough, both are on-screen
  2388. * so no bottom clipping is needed.
  2389.  
  2390.  move.w (a2,d1*2),d0    ; first x
  2391.  move.w (a2,d3*2),d2    ; second x
  2392.  move.l ypos,d1
  2393.  move.l d1,d3
  2394.  divs d4,d1        ; first y
  2395.  divs d5,d3        ; second y
  2396. lineclipped:
  2397.  move.l #rightsidetab,a3
  2398.  cmp.w d1,d3
  2399.  beq lineflat
  2400.  st drawit
  2401.  bgt lineonright
  2402.  move.l #leftsidetab,a3
  2403.  exg d1,d3
  2404.  exg d0,d2
  2405.  
  2406.  lea (a3,d1*2),a3
  2407.  
  2408.  cmp.w top(pc),d1
  2409.  bge.s .nonewtop
  2410.  move.w d1,top
  2411. .nonewtop:
  2412.  cmp.w bottom(pc),d3
  2413.  ble.s .nonewbot
  2414.  move.w d3,bottom
  2415. .nonewbot:
  2416.  
  2417.  sub.w d1,d3    ; dy
  2418.  sub.w d0,d2    ; dx
  2419.  
  2420.  blt .linegoingleft
  2421.  sub.w #1,d0
  2422.  
  2423.  ext.l d2
  2424.  divs d3,d2
  2425.  move.w d2,d6
  2426.  swap d2
  2427.  
  2428. ; moveq #0,d6
  2429. ; sub.w d3,d2
  2430. ; blt.s .noco
  2431. ;.makeco
  2432. ; addq #1,d6
  2433. ; sub.w d3,d2
  2434. ; bge.s .makeco
  2435. ;.noco
  2436. ; add.w d3,d2
  2437.  
  2438.  move.w d3,d4
  2439.  move.w d3,d5
  2440.  subq #1,d5
  2441.  move.w d6,d1
  2442.  addq #1,d1
  2443.  
  2444. .pixlopright:
  2445.  move.w d0,(a3)+
  2446.  sub.w d2,d4
  2447.  bge.s .nobigstep
  2448.  add.w d1,d0
  2449.  add.w d3,d4
  2450.  dbra d5,.pixlopright
  2451.  bra lineflat
  2452. .nobigstep
  2453.  add.w d6,d0
  2454.  dbra d5,.pixlopright
  2455.  bra lineflat
  2456.  
  2457. .linegoingleft:
  2458.  
  2459.  sub.w #1,d0
  2460.  
  2461.  neg.w d2
  2462.  
  2463.  ext.l d2
  2464.  divs d3,d2
  2465.  move.w d2,d6
  2466.  swap d2
  2467.  
  2468.  
  2469. ; moveq #0,d6
  2470. ; sub.w d3,d2
  2471. ; blt.s .nocol
  2472. ;.makecol
  2473. ; addq #1,d6
  2474. ; sub.w d3,d2
  2475. ; bge.s .makecol
  2476. ;.nocol
  2477. ; add.w d3,d2
  2478.  
  2479.  
  2480.  
  2481.  move.w d3,d4
  2482.  move.w d3,d5
  2483.  subq #1,d5
  2484.  
  2485.  move.w d6,d1
  2486.  addq #1,d1
  2487.  
  2488. .pixlopleft:
  2489.  sub.w d2,d4
  2490.  bge.s .nobigstepl
  2491.  sub.w d1,d0
  2492.  add.w d3,d4
  2493.  move.w d0,(a3)+
  2494.  dbra d5,.pixlopleft
  2495.  bra lineflat
  2496.  
  2497. .nobigstepl
  2498.  sub.w d6,d0
  2499.  move.w d0,(a3)+
  2500.  dbra d5,.pixlopleft
  2501.  bra lineflat
  2502.  
  2503. lineonright:
  2504.  
  2505.  lea (a3,d1*2),a3
  2506.  
  2507.  cmp.w top(pc),d1
  2508.  bge.s .nonewtop
  2509.  move.w d1,top
  2510. .nonewtop:
  2511.  cmp.w bottom(pc),d3
  2512.  ble.s .nonewbot
  2513.  move.w d3,bottom
  2514. .nonewbot:
  2515.  
  2516.  sub.w d1,d3    ; dy
  2517.  sub.w d0,d2    ; dx
  2518.  blt .linegoingleft
  2519. ; addq #1,d0
  2520.  ext.l d2
  2521.  divs d3,d2
  2522.  move.w d2,d6
  2523.  swap d2
  2524.  
  2525. ; moveq #0,d6
  2526. ; sub.w d3,d2
  2527. ; blt.s .noco
  2528. ;.makeco
  2529. ; addq #1,d6
  2530. ; sub.w d3,d2
  2531. ; bge.s .makeco
  2532. ;.noco
  2533. ; add.w d3,d2
  2534.  
  2535.  move.w d3,d4
  2536.  move.w d3,d5
  2537.  subq #1,d5
  2538.  move.w d6,d1
  2539.  addq #1,d1
  2540.  
  2541. .pixlopright:
  2542.  sub.w d2,d4
  2543.  bge.s .nobigstep
  2544.  add.w d1,d0
  2545.  add.w d3,d4
  2546.  move.w d0,(a3)+
  2547.  dbra d5,.pixlopright
  2548.  bra lineflat
  2549.  
  2550. .nobigstep
  2551.  add.w d6,d0
  2552.  move.w d0,(a3)+
  2553.  dbra d5,.pixlopright
  2554.  bra lineflat
  2555.  
  2556. .linegoingleft:
  2557. ; addq #1,d0
  2558.  neg.w d2
  2559.  
  2560.  ext.l d2
  2561.  divs d3,d2
  2562.  move.w d2,d6
  2563.  swap d2
  2564.  
  2565.  
  2566. ; moveq #0,d6
  2567. ; sub.w d3,d2
  2568. ; blt.s .nocol
  2569. ;.makecol
  2570. ; addq #1,d6
  2571. ; sub.w d3,d2
  2572. ; bge.s .makecol
  2573. ;.nocol
  2574. ; add.w d3,d2
  2575.  
  2576.  move.w d3,d4
  2577.  move.w d3,d5
  2578.  subq #1,d5
  2579.  move.w d6,d1
  2580.  addq #1,d1
  2581.  
  2582. .pixlopleft:
  2583.  move.w d0,(a3)+
  2584.  sub.w d2,d4
  2585.  bge.s .nobigstepl
  2586.  sub.w d1,d0
  2587.  add.w d3,d4
  2588.  dbra d5,.pixlopleft
  2589.  bra lineflat
  2590.  
  2591. .nobigstepl
  2592.  sub.w d6,d0
  2593.  dbra d5,.pixlopleft
  2594.  
  2595. lineflat:
  2596.  
  2597. bothbehind:
  2598.  dbra d7,sideloop
  2599.  
  2600. pastsides:
  2601.  
  2602.  
  2603.  addq #2,a0
  2604.  
  2605.  move.w #104*4,linedir
  2606.  move.l frompt,a6
  2607.  add.l #104*4*41,a6
  2608.  move.w (a0)+,scaleval
  2609.  move.w (a0)+,whichtile
  2610.  move.w (a0)+,d6
  2611.  add.w ZoneBright,d6
  2612.  move.w d6,lighttype
  2613.  move.w above(pc),d6
  2614.  beq groundfloor
  2615. * on ceiling:
  2616.  move.w #-104*4,linedir
  2617.  suba.w #104*4,a6
  2618. groundfloor:
  2619.  
  2620.  move.w xoff,d6
  2621.  move.w zoff,d7
  2622.  add.w xwobxoff,d7
  2623.  add.w xwobzoff,d6
  2624.  move.w scaleval,d3
  2625.  move.l scaleprogfrom(pc,d3.w*4),scaleprog
  2626.  tst.w d3
  2627.  beq.s .samescale
  2628.  bgt.s .scaledown
  2629.  neg.w d3
  2630.  asr.l d3,d7
  2631.  asr.l d3,d6
  2632.  bra.s .samescale
  2633. .scaledown:
  2634.  asl.l d3,d6
  2635.  asl.l d3,d7
  2636. .samescale
  2637.  asl.w #8,d7
  2638.  move.w d6,sxoff
  2639.  move.w d7,szoff
  2640.  bra pastscale 
  2641.  
  2642.  asr.l #3,d1
  2643.  asr.l #3,d2
  2644.  asr.l #2,d1
  2645.  asr.l #2,d2
  2646.  asr.l #1,d1
  2647.  asr.l #1,d2
  2648. scaleprogfrom
  2649.  nop
  2650.  nop
  2651.  asl.l #1,d1
  2652.  asl.l #1,d2
  2653.  asl.l #2,d1
  2654.  asl.l #2,d2
  2655.  asl.l #3,d1
  2656.  asl.l #3,d2
  2657.  
  2658. top: dc.w 0
  2659. bottom: dc.w 0
  2660. ypos: dc.l 0
  2661. nfloors: dc.w 0
  2662. lighttype: dc.w 0
  2663. above: dc.w 0 
  2664. linedir: dc.w 0
  2665. distaddr: dc.w 0
  2666.  
  2667. minz: dc.w 0
  2668. leftsidetab:
  2669.  ds.w 80
  2670. rightsidetab:
  2671.  ds.w 80
  2672. leftsideclip:
  2673.  ds.w 80
  2674. rightsideclip:
  2675.  ds.w 80
  2676.  
  2677. movespd: dc.w 0
  2678. largespd: dc.l 0
  2679.  
  2680. pastscale:
  2681.  
  2682.  tst.b drawit(pc)
  2683.  beq dontdrawfloor
  2684.  
  2685.  move.l a0,-(a7)
  2686.  
  2687.  move.l #leftsidetab,a4
  2688.  move.w top(pc),d1
  2689.  move.w bottom(pc),d7
  2690.  tst.w above
  2691.  beq.s clipfloor
  2692.  
  2693.  move.w #40,d3
  2694.  move.w d3,d4
  2695.  sub.w topclip,d3
  2696.  sub.w botclip,d4
  2697.  cmp.w d3,d1
  2698.  bge predontdrawfloor
  2699.  cmp.w d4,d7
  2700.  blt predontdrawfloor
  2701.  cmp.w d4,d1
  2702.  bge.s .nocliptoproof
  2703.  move.w d4,d1
  2704. .nocliptoproof
  2705.  cmp.w d3,d7
  2706.  blt doneclip
  2707.  move.w d3,d7
  2708.  bra doneclip
  2709.  
  2710. clipfloor:
  2711.  move.w botclip,d4
  2712.  sub.w #40,d4
  2713.  cmp.w d4,d1
  2714.  bge predontdrawfloor
  2715.  move.w topclip,d3
  2716.  sub.w #40,d3
  2717.  cmp.w d3,d1
  2718.  bge.s .nocliptopfloor
  2719.  move.w d3,d1
  2720. .nocliptopfloor 
  2721.  cmp.w d3,d7
  2722.  ble predontdrawfloor
  2723.  cmp.w d4,d7
  2724.  blt.s .noclipbotfloor
  2725.  move.w d4,d7
  2726. .noclipbotfloor:
  2727.  
  2728. doneclip:
  2729.  
  2730.  lea (a4,d1*2),a4
  2731. ; move.l #dists,a2
  2732.  move.w distaddr,d0
  2733.  muls #64,d0
  2734.  move.l d0,a2
  2735. ; muls #25,d0
  2736. ; adda.w d0,a2
  2737. ; lea (a2,d1*2),a2
  2738.  sub.w d1,d7
  2739.  ble predontdrawfloor 
  2740.  move.w d1,d0
  2741.  bne.s .notzero
  2742.  moveq #1,d0
  2743. .notzero
  2744.  muls linedir,d1
  2745.  add.l d1,a6
  2746.  move.l #floorscalecols,a1
  2747.  move.l LineToUse,a5
  2748.  
  2749.  tst.b anyclipping
  2750.  beq dofloornoclip
  2751.  
  2752. dofloor:
  2753. ; move.w (a2)+,d0
  2754.  move.w leftclip(pc),d3
  2755.  move.w rightclip(pc),d4
  2756.  move.w rightsidetab-leftsidetab(a4),d2
  2757.  addq #1,d2
  2758.  cmp.w d3,d2
  2759.  ble.s nodrawline
  2760.  cmp.w d4,d2
  2761.  ble.s noclipright
  2762.  move.w d4,d2
  2763. noclipright:
  2764.  move.w (a4),d1
  2765.  cmp.w d4,d1
  2766.  bge.s nodrawline
  2767.  cmp.w d3,d1
  2768.  bge.s noclipleft
  2769.  move.w d3,d1
  2770. noclipleft:
  2771.  cmp.w d1,d2
  2772.  ble.s nodrawline
  2773.  
  2774.  move.w d1,leftedge
  2775.  move.w d2,rightedge
  2776.  
  2777.  move.l a6,a3
  2778.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  2779.  move.l a2,d7
  2780.  divs d0,d7
  2781.  move.w d7,d0
  2782.  jsr (a5)
  2783.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  2784. nodrawline
  2785.  adda.w linedir(pc),a6
  2786.  addq #2,a4
  2787.  addq #1,d0
  2788.  subq #1,d7
  2789.  bgt dofloor
  2790.  
  2791. predontdrawfloor
  2792.  move.l (a7)+,a0
  2793.  
  2794. dontdrawfloor:
  2795.  
  2796.  CACHE_FREEZE_OFF d2
  2797.  rts
  2798.  
  2799. anyclipping: dc.w 0
  2800.  
  2801. dofloornoclip:
  2802. ; move.w (a2)+,d0
  2803.  move.w rightsidetab-leftsidetab(a4),d2
  2804.  addq #1,d2
  2805.  move.w (a4)+,leftedge
  2806.  move.w d2,rightedge
  2807.  
  2808.  move.l a6,a3
  2809.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  2810.  move.l a2,d7
  2811.  divs d0,d7
  2812.  move.w d7,d0
  2813.  jsr (a5)
  2814.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  2815.  adda.w linedir(pc),a6
  2816.  addq #1,d0
  2817.  subq #1,d7
  2818.  bgt dofloornoclip
  2819.  
  2820.  bra predontdrawfloor
  2821.  
  2822.  
  2823. dists:
  2824. ; incbin "floordists"
  2825. drawit: dc.w 0
  2826.  
  2827. LineToUse: dc.l 0
  2828.  
  2829. ***************************
  2830. * Right then, time for the floor
  2831. * routine...
  2832. * For test purposes, give it
  2833. * a3 = point to screen
  2834. * d0= z distance away
  2835. * and sinval+cosval must be set up.
  2836. ***************************
  2837.  
  2838. leftedge: dc.w 0
  2839. rightedge: dc.w 0
  2840.  
  2841. rndpt: dc.l rndtab
  2842.  
  2843. WaterFloorLine:
  2844.  
  2845.  CACHE_OFF d2
  2846.  
  2847.  move.l rndpt,a2
  2848.  move.w (a2)+,d1
  2849.  move.w (a2)+,d2
  2850.  move.w (a2)+,d3
  2851.  cmp.l #endrnd-4,a2
  2852.  blt.s okrnd
  2853.  suba.w #98,a2
  2854. okrnd: 
  2855.  move.l a2,rndpt
  2856.  
  2857.  asr.w #6,d0
  2858.  move.w d0,d1
  2859.  move.w d0,d2
  2860.  move.w d0,d3
  2861.  move.l clipd(pc,d1.w*4),d1
  2862.  move.l clipd(pc,d2.w*4),d2
  2863.  move.l clipd(pc,d3.w*4),d3
  2864.  bra pcli
  2865.  
  2866.  dc.l 0
  2867. clipd:
  2868.  dc.l 0
  2869.  dc.l 512
  2870.  dc.l 512*2
  2871.  dc.l 512*3
  2872.  dc.l 512*4
  2873.  dc.l 512*5
  2874.  dc.l 512*6
  2875.  dc.l 512*7
  2876.  dc.l 512*8
  2877.  dc.l 512*9
  2878.  dc.l 512*10
  2879.  dc.l 512*11
  2880.  dc.l 512*12
  2881.  dc.l 512*13
  2882.  dc.l 512*14
  2883.  dc.l 512*15
  2884.  dc.l 512*15
  2885.  dc.l 512*15
  2886.  dc.l 512*15
  2887.  dc.l 512*15
  2888.  dc.l 512*15
  2889.  dc.l 512*15
  2890.  dc.l 512*15
  2891.  dc.l 512*15
  2892.  dc.l 512*15
  2893.  dc.l 512*15
  2894.  dc.l 512*15
  2895.  
  2896. pcli:
  2897.  
  2898.  move.l #brightentab,a2
  2899.  move.l a2,a4
  2900.  move.l a4,a5
  2901.  add.l d1,a2
  2902.  add.l d2,a4
  2903.  add.l d3,a5
  2904.  
  2905.  move.l #doacrossline,a1
  2906.  move.w leftedge(pc),d1
  2907.  move.w rightedge(pc),d2
  2908.  sub.w d1,d2
  2909.  move.w time(pc,d1.w*2),d1
  2910.  move.w time(pc,d2.w*2),d2
  2911.  lea (a1,d1.w),a1
  2912.  move.w (a1,d2.w),d4
  2913.  move.w #$4e75,(a1,d2.w)
  2914.  
  2915.  moveq #0,d0
  2916.  jsr (a1)
  2917.  move.w d4,(a1,d2.w)
  2918.  
  2919.  CACHE_ON d2
  2920.  
  2921.  rts
  2922.  
  2923. time:
  2924. val SET 0
  2925.  REPT 100
  2926.  dc.w val
  2927. val SET val+10
  2928.  ENDR
  2929.  
  2930. storeit: dc.l 0
  2931.  
  2932. doacrossline:
  2933.  incbin "Doacrossline"
  2934.  rts
  2935.  
  2936. dst: dc.w 0
  2937.  
  2938. FloorLine:
  2939.  
  2940.  move.l #floortile,a0
  2941.  adda.w whichtile,a0
  2942.  move.w lighttype,d1
  2943.  
  2944.  move.w d0,dst
  2945.  
  2946.  move.w d0,d2
  2947. *********************
  2948. * Old version
  2949.  asr.w #6,d2
  2950.  add.w #5,d1
  2951. *********************
  2952. ; asr.w #3,d2
  2953. ; sub.w #4,d2
  2954. ; cmp.w #6,d2
  2955. ; blt.s flbrbr
  2956. ; move.w #6,d2
  2957. ;flbrbr:
  2958. *********************
  2959.  add.w d2,d1
  2960.  bge.s .fixedbright
  2961.  moveq #0,d1
  2962. .fixedbright:
  2963.  cmp.w #28,d1
  2964.  ble.s .smallbright
  2965.  move.w #28,d1
  2966. .smallbright:
  2967.  lea floorscalecols,a1
  2968.  add.l floorbright(pc,d1.w*4),a1
  2969.  bra pastfloorbright
  2970.  
  2971. ConstCol: dc.w 0
  2972.  
  2973. BumpLine:
  2974.  
  2975.  tst.b smoothbumps
  2976.  beq.s Chunky
  2977.  
  2978.  move.l #SmoothTile,a0
  2979.  lea Smoothscalecols,a1
  2980.  bra pastast
  2981.  
  2982. Chunky:
  2983.  
  2984.  moveq #0,d2
  2985.  move.l #Bumptile,a0
  2986.  move.w whichtile,d2
  2987.  adda.w d2,a0
  2988.  ror.l #2,d2
  2989.  lsr.w #6,d2
  2990.  rol.l #2,d2
  2991.  and.w #15,d2
  2992.  move.l #ConstCols,a1
  2993.  move.w (a1,d2.w*2),ConstCol
  2994.  lea Bumpscalecols,a1
  2995.  
  2996. pastast:
  2997.  move.w lighttype,d1
  2998.  
  2999.  move.w d0,dst
  3000.  
  3001.  move.w d0,d2
  3002. *********************
  3003. * Old version
  3004.  asr.w #6,d2
  3005.  add.w #5,d1
  3006. *********************
  3007. ; asr.w #3,d2
  3008. ; sub.w #4,d2
  3009. ; cmp.w #6,d2
  3010. ; blt.s flbrbr
  3011. ; move.w #6,d2
  3012. ;flbrbr:
  3013. *********************
  3014.  add.w d2,d1
  3015.  bge.s .fixedbright
  3016.  moveq #0,d1
  3017. .fixedbright:
  3018.  cmp.w #28,d1
  3019.  ble.s .smallbright
  3020.  move.w #28,d1
  3021. .smallbright:
  3022.  add.l floorbright(pc,d1.w*4),a1
  3023.  bra pastfloorbright
  3024.  
  3025.  
  3026. floorbright:
  3027.  dc.l 512*0
  3028.  dc.l 512*1
  3029.  dc.l 512*1
  3030.  dc.l 512*2
  3031.  dc.l 512*2
  3032.  
  3033.  dc.l 512*3
  3034.  dc.l 512*3
  3035.  dc.l 512*4
  3036.  dc.l 512*4
  3037.  dc.l 512*5
  3038.  
  3039.  dc.l 512*5
  3040.  dc.l 512*6
  3041.  dc.l 512*6
  3042.  dc.l 512*7
  3043.  dc.l 512*7
  3044.  
  3045.  dc.l 512*8
  3046.  dc.l 512*8
  3047.  dc.l 512*9
  3048.  dc.l 512*9
  3049.  dc.l 512*10
  3050.  
  3051.  dc.l 512*10
  3052.  dc.l 512*11
  3053.  dc.l 512*11
  3054.  dc.l 512*12
  3055.  dc.l 512*12
  3056.  
  3057.  dc.l 512*13
  3058.  dc.l 512*13
  3059.  dc.l 512*14
  3060.  dc.l 512*14
  3061.  
  3062. widthleft: dc.w 0
  3063. scaleval: dc.w 0
  3064. sxoff: dc.w 0
  3065. szoff: dc.w 0
  3066. xoff34: dc.w 0
  3067. zoff34: dc.w 0
  3068. scosval: dc.w 0
  3069. ssinval: dc.w 0
  3070.  
  3071.  
  3072. floorsetbright:
  3073.  move.l #walltiles,a0
  3074.  
  3075. pastfloorbright
  3076.  
  3077.  
  3078.  move.w d0,d1
  3079.  muls cosval,d1    ; change in x across whole width
  3080.  move.w d0,d2
  3081.  muls sinval,d2    ; change in z across whole width
  3082.  neg.l d2
  3083. scaleprog:
  3084.  asr.l #1,d1
  3085.  asr.l #1,d2
  3086.  
  3087.  move.l d1,d3 ;    z cos
  3088.  move.l d3,d6
  3089.  move.l d3,d5
  3090.  asr.l #1,d6
  3091.  add.l d6,d3
  3092.  asr.l #1,d3
  3093.  
  3094.  move.l d2,d4    ; z sin
  3095.  move.l d4,d6
  3096.  asr.l #1,d6
  3097.  add.l d4,d6
  3098.  add.l d3,d4
  3099.  neg.l d4    ; start x
  3100.  
  3101.  asr.l #1,d6    ; zsin/2
  3102.  sub.l d6,d5    ; start z
  3103.  
  3104.  move.w d4,startsmoothx
  3105.  move.w d5,startsmoothz
  3106.  
  3107.  swap d4
  3108.  asr.l #8,d5
  3109.  add.w szoff,d5
  3110.  add.w sxoff,d4
  3111.  and.w #63,d4
  3112.  and.w #63*256,d5
  3113.  move.b d4,d5
  3114.  
  3115.  asr.l #6,d1
  3116.  asr.l #6,d2
  3117.  move.w leftedge(pc),d6
  3118.  beq.s nomultleft
  3119.  
  3120.  move.l d1,d3
  3121.  asr.l #6,d3
  3122.  muls d6,d3
  3123.  asl.l #6,d3
  3124.  swap d3
  3125.  add.b d3,d5
  3126.  
  3127.  move.l d2,d3
  3128.  asr.l #6,d3
  3129.  muls d6,d3
  3130.  asl.l #6,d3
  3131.  swap d3
  3132.  lsl.w #8,d3
  3133.  add.w d3,d5
  3134.  
  3135. nomultleft:
  3136.  
  3137.  move.w d1,a4
  3138.  move.w d2,a5
  3139.  asr.l #8,d2
  3140.  and.w #%0011111100000000,d2
  3141.  swap d1
  3142.  add.w d1,d2
  3143.  move.w #%11111100111111,d1
  3144.  and.w d1,d5
  3145.  swap d5
  3146.  move.w startsmoothz,d5
  3147.  swap d5
  3148.  swap d2
  3149.  move.w a5,d2
  3150.  swap d2
  3151.  
  3152. ***********************************
  3153.  
  3154.  move.w d6,a2
  3155.  move.l d2,d6
  3156.  add.w #256,d6
  3157.  
  3158.  moveq #0,d0
  3159.  
  3160.  tst.w a2
  3161.  beq startatleftedge
  3162.  
  3163.  move.w widthleft(pc),d4
  3164.  
  3165.  move.w rightedge(pc),d3
  3166.  
  3167.  cmp.w #31,a2
  3168.  bgt.s notinfirststrip
  3169.  lea (a3,a2.w*4),a3
  3170.  cmp.w #32,d3
  3171.  ble.s allinfirststrip
  3172.  move.w #32,d7
  3173.  sub.w d7,d3
  3174.  sub.w a2,d7
  3175.  bra intofirststrip
  3176.  
  3177. allinfirststrip
  3178.  sub.w a2,d3
  3179.  move.w d3,d7
  3180.  move.w #0,d4
  3181.  bra allintofirst
  3182.  
  3183. notinfirststrip:
  3184.  sub.w #32,a2
  3185.  sub.w #32,d3
  3186.  adda.w #33*4,a3
  3187.  cmp.w #31,a2
  3188.  bgt.s notstartinsec
  3189.  lea (a3,a2.w*4),a3
  3190.  cmp.w #32,d3
  3191.  ble.s allinsecstrip
  3192.  move.w #32,d7
  3193.  sub.w d7,d3
  3194.  sub.w a2,d7
  3195.  move.w d3,d4
  3196.  bra tstwat
  3197.  
  3198. allinsecstrip
  3199.  sub.w a2,d3
  3200.  move.w d3,d7
  3201.  move.w #0,d4
  3202.  bra tstwat
  3203.  rts
  3204.  
  3205. notstartinsec:
  3206.  sub.w #32,a2
  3207.  sub.w #32,d3
  3208.  adda.w #33*4,a3
  3209.  lea (a3,a2.w*4),a3
  3210.  cmp.w #32,d3
  3211.  ble.s allinthirdstrip
  3212.  move.w #32,d7
  3213.  sub.w d7,d3
  3214.  sub.w a2,d7
  3215.  move.w d3,d4
  3216.  bra tstwat
  3217.  rts
  3218.  
  3219. allinthirdstrip
  3220.  sub.w a2,d3
  3221.  move.w d3,d7
  3222.  move.w #0,d4
  3223.  bra tstwat
  3224.  rts
  3225.  
  3226. startatleftedge:
  3227.  
  3228.  move.w rightedge(pc),d3
  3229.  sub.w a2,d3
  3230.  
  3231.  move.w d3,d7
  3232.  cmp.w #32,d7
  3233.  ble.s .notoowide
  3234.  move.w #32,d7
  3235. .notoowide:
  3236.  sub.w d7,d3
  3237. intofirststrip:
  3238.  
  3239.  move.w d3,d4
  3240. allintofirst:
  3241.  
  3242.  move.w startsmoothx,d3
  3243.  
  3244. tstwat:
  3245.  
  3246.  tst.b usewater
  3247.  bne texturedwater
  3248.  
  3249.  
  3250. ******************************
  3251. * BumpMap the floor/ceiling! *
  3252.  tst.b usebumps
  3253.  bne.s BumpMap
  3254. ******************************
  3255.  
  3256. ordinary:
  3257.  moveq #0,d0
  3258.  
  3259.  dbra d7,acrossscrn
  3260.  rts
  3261.  
  3262. usebumps: dc.w $0
  3263. smoothbumps: dc.w $0
  3264.  
  3265.  include "ab3:source/bumpmap.s"
  3266.  
  3267.  CNOP 0,4
  3268. backbefore:
  3269.  and.w d1,d5
  3270.  move.b (a0,d5.w*4),d0
  3271.  move.w (a1,d0.w*2),(a3)
  3272.  addq #4,a3
  3273.  add.w a4,d3
  3274.  addx.l d6,d5
  3275.  dbcs d7,acrossscrn
  3276.  dbcc d7,backbefore
  3277.  bcc.s past1
  3278.  add.w #256,d5 
  3279.  bra.s past1
  3280.  
  3281. acrossscrn:
  3282.  and.w d1,d5
  3283.  move.b (a0,d5.w*4),d0
  3284.  move.w (a1,d0.w*2),(a3)
  3285.  addq #4,a3
  3286.  add.w a4,d3
  3287.  addx.l d2,d5
  3288.  dbcs d7,acrossscrn
  3289.  dbcc d7,backbefore
  3290.  bcc.s past1
  3291.  add.w #256,d5 
  3292. past1:
  3293.  
  3294.  move.w d4,d7
  3295.  bne.s .notdoneyet
  3296.  CACHE_FREEZE_ON d2
  3297.  rts
  3298. .notdoneyet:
  3299.  
  3300.  cmp.w #32,d7
  3301.  ble.s .notoowide
  3302.  move.w #32,d7
  3303. .notoowide
  3304.  sub.w d7,d4  
  3305.  addq #4,a3
  3306.  
  3307.  dbra d7,acrossscrn
  3308.  CACHE_FREEZE_ON d2
  3309.  rts
  3310.  
  3311. waterpt: dc.l waterlist
  3312.  
  3313. waterlist:
  3314.  dc.l waterfile
  3315.  dc.l waterfile+2
  3316.  dc.l waterfile+256
  3317.  dc.l waterfile+256+2
  3318.  dc.l waterfile+512
  3319.  dc.l waterfile+512+2
  3320.  dc.l waterfile+768
  3321.  dc.l waterfile+768+2
  3322. ; dc.l waterfile+768
  3323. ; dc.l waterfile+512+2
  3324. ; dc.l waterfile+512
  3325. ; dc.l waterfile+256+2
  3326. ; dc.l waterfile+256
  3327. ; dc.l waterfile+2
  3328. endwaterlist:
  3329.  
  3330. watertouse: dc.l waterfile
  3331.  
  3332. wtan: dc.w 0
  3333. wateroff: dc.w 0
  3334.  
  3335. texturedwater:
  3336.  
  3337.  add.w wateroff,d5
  3338.  
  3339.  move.l #brightentab,a1
  3340.  move.w dst,d0
  3341.  clr.b d0
  3342.  add.w d0,d0
  3343.  adda.w d0,a1
  3344.  
  3345.  move.w dst,d0
  3346.  asl.w #7,d0
  3347.  add.w wtan,d0
  3348.  and.w #8191,d0
  3349.  move.l #SineTable,a0
  3350.  move.w (a0,d0.w),d0
  3351.  ext.l d0
  3352.  move.w dst,d3
  3353.  add.w #300,d3
  3354.  divs d3,d0
  3355.  asr.w #6,d0
  3356.  add.w #2,d0
  3357.  
  3358.  move.w dst,d3
  3359.  asr.w #7,d3
  3360.  add.w d3,d0
  3361.  
  3362.  muls #104*4,d0
  3363.  move.w d0,a6
  3364.  
  3365.  move.l watertouse,a0
  3366.  
  3367.  move.w startsmoothx,d3
  3368.  dbra d7,acrossscrnw
  3369.  rts
  3370.  
  3371. backbeforew:
  3372.  and.w d1,d5
  3373.  move.w (a0,d5.w*4),d0
  3374.  move.b 1(a3,a6.w),d0
  3375.  move.w (a1,d0.w*2),(a3)
  3376.  addq #4,a3
  3377.  add.w a4,d3
  3378.  addx.l d6,d5
  3379.  dbcs d7,acrossscrnw
  3380.  dbcc d7,backbeforew
  3381.  bcc.s past1w
  3382.  add.w #256,d5 
  3383.  bra.s past1w
  3384.  
  3385. acrossscrnw:
  3386.  and.w d1,d5
  3387.  move.w (a0,d5.w*4),d0
  3388.  move.b 1(a3,a6.w),d0
  3389.  move.w (a1,d0.w*2),(a3)
  3390.  addq #4,a3
  3391.  add.w a4,d3
  3392.  addx.l d2,d5
  3393.  dbcs d7,acrossscrnw
  3394.  dbcc d7,backbeforew
  3395.  bcc.s past1w
  3396.  add.w #256,d5 
  3397. past1w:
  3398.  
  3399.  move.w d4,d7
  3400.  bne.s .notdoneyet
  3401.  rts
  3402. .notdoneyet:
  3403.  
  3404.  cmp.w #32,d7
  3405.  ble.s .notoowide
  3406.  move.w #32,d7
  3407. .notoowide
  3408.  sub.w d7,d4  
  3409.  addq #4,a3
  3410.  
  3411.  dbra d7,acrossscrnw
  3412.  CACHE_FREEZE_ON d2
  3413.  rts
  3414.  
  3415. usewater: dc.w 0
  3416. startsmoothx: dc.w 0
  3417. startsmoothz: dc.w 0
  3418.  
  3419. ********************************
  3420. *
  3421.  include "AB3:source/ObjDraw3.chipram"
  3422. *
  3423. ********************************
  3424.  
  3425. numframes:
  3426.  dc.w 0
  3427.  
  3428. alframe: dc.l Objects+4096
  3429.  
  3430. alan:
  3431.  dcb.l 6,0
  3432.  dcb.l 6,1
  3433.  dcb.l 6,2
  3434.  dcb.l 6,3
  3435. endalan:
  3436.  
  3437. alanptr: dc.l alan
  3438.  
  3439. Time2: dc.l 0
  3440. dispco:
  3441.  dc.w 0
  3442.  
  3443. KInt_Init    ;VBR Assumed $0
  3444.         move.l $68.w,OLDKINT
  3445.         Move.l    #KInt_Main,$68.w    Install Interrupt 
  3446.         And.b    #$3f,$bfe201        Set Timers
  3447.         Move.b    #$7f,$bfed01
  3448.         Move.b    $bfed01,d0
  3449.         Move.b    #$88,$bfed01
  3450.         St.b    KInt_CCode        
  3451.         Move.b    #$a0,$bfee01        Start Timey Thing
  3452.         Rts                And return
  3453.  
  3454. OLDKINT: dc.l 0
  3455.  
  3456. KInt_Main    
  3457.         Movem.l    d0/d1/a0/a1/a6,-(a7)    Stack everything
  3458.         Move.w    #8,$dff09a        Temp Disable Int.
  3459.         Move.w    $dff01e,d0        Intreqr
  3460.         And.w    #8,d0            Mask Out All X^ K_Int
  3461.     Beq    KInt_End            Not Keyboard Interrupt
  3462.         Lea    $bfed01,a6
  3463.         Move.w    #$8,$dff09c        Clear Int.Request
  3464.         Move.b    -$100(a6),d0        Move Raw Keyboard value
  3465.         Ror.b    #1,d0            Roll to correct
  3466.         Not.b    d0            
  3467.         Move.b    d0,KInt_CCode        Save Corrected Keycode
  3468. .HandShake    Move.b    #8,(a6)
  3469.         Move.b    #7,-$900(a6)
  3470.         Move.b    #0,-$800(a6)
  3471.         Move.b    #0,-$100(a6)
  3472.         Move.b    #$d1,$100(a6)        
  3473.         Tst.b    (a6)    
  3474. .wait        Btst    #0,(a6)
  3475.     Beq.s    .wait
  3476.         Move.b    #$a0,$100(a6)        
  3477.         Move.b    (a6),d0        
  3478.         Move.b    #$88,(a6)
  3479.         Lea    KeyMap,a1
  3480.         Moveq.w    #0,d0
  3481.         Move.b    KInt_CCode(pc),d0
  3482.     Bmi.s    KInt_KeyUp            neg if up 
  3483.  
  3484. KInt_KeyDown
  3485. ;        st (a1,d0.w)
  3486.     Bra    KInt_End
  3487.  
  3488. KInt_KeyUp
  3489.         And.w    #$7f,d0            Make code Positive
  3490. ;        clr.b (a1,d0.w)
  3491. KInt_End    Movem.l    (a7)+,d0/d1/a0/a1/a6    Unstack Everything
  3492.     
  3493.         Move.w    #$8008,$dff09a        Re-enable Int.
  3494.         Rte
  3495.  
  3496. KInt_CCode    Ds.b    1
  3497. KInt_Askey    Ds.b    1
  3498. KInt_OCode    Ds.w    1
  3499.  
  3500.  
  3501. PLR1_mouse_control
  3502.  jsr ReadMouse
  3503.  move.l #SineTable,a0
  3504.  move.w PLR1s_angspd,d1
  3505.  move.w PLR1s_angpos,d0
  3506.  move.w (a0,d0.w),PLR1s_sinval
  3507.  adda.w #2048,a0
  3508.  move.w (a0,d0.w),PLR1s_cosval
  3509.  
  3510.  move.l PLR1s_xspdval,d6
  3511.  move.l PLR1s_zspdval,d7
  3512.  
  3513.  neg.l d6
  3514.  ble.s .nobug1
  3515.  asr.l #1,d6
  3516.  add.l #1,d6
  3517.  bra.s .bug1
  3518. .nobug1
  3519.  asr.l #1,d6
  3520. .bug1:
  3521.  
  3522.  neg.l d7
  3523.  ble.s .nobug2
  3524.  asr.l #1,d7
  3525.  add.l #1,d7
  3526.  bra.s .bug2
  3527. .nobug2
  3528.  asr.l #1,d7
  3529. .bug2: 
  3530.  
  3531.  move.w PLR1s_sinval,d1
  3532.  move.w PLR1s_cosval,d2
  3533.  
  3534.  move.w d2,d4
  3535.  move.w d1,d5
  3536.  muls lrs,d4
  3537.  muls lrs,d5
  3538.  
  3539.  move.w ymouse,d3
  3540.  sub.w oldymouse,d3
  3541.  add.w d3,oldymouse
  3542.  asr.w #1,d3
  3543.  cmp.w #50,d3
  3544.  ble.s nofastfor
  3545.  move.w #50,d3
  3546. nofastfor:
  3547.  cmp.w #-50,d3
  3548.  bge.s nofastback
  3549.  move.w #-50,d3
  3550. nofastback:
  3551.  
  3552.  muls d3,d2
  3553.  muls d3,d1
  3554.  sub.l d4,d1
  3555.  add.l d5,d2
  3556.  
  3557.  sub.l d1,d6
  3558.  sub.l d2,d7
  3559.  add.l d6,PLR1s_xspdval
  3560.  add.l d7,PLR1s_zspdval
  3561.  move.l PLR1s_xspdval,d6
  3562.  move.l PLR1s_zspdval,d7
  3563.  add.l d6,PLR1s_xoff
  3564.  add.l d7,PLR1s_zoff
  3565.  
  3566.  tst.b PLR1_fire
  3567.  beq.s .firenotpressed
  3568. ; fire was pressed last time.
  3569.  btst #6,$bfe001
  3570.  bne.s .firenownotpressed
  3571. ; fire is still pressed this time.
  3572.  st PLR1_fire
  3573.  bra .doneplr1
  3574.  
  3575. .firenownotpressed:
  3576. ; fire has been released.
  3577.  clr.b PLR1_fire
  3578.  bra .doneplr1
  3579.  
  3580. .firenotpressed
  3581.  
  3582. ; fire was not pressed last frame...
  3583.  
  3584.  btst #6,$bfe001
  3585. ; if it has still not been pressed, go back above
  3586.  bne.s .firenownotpressed
  3587. ; fire was not pressed last time, and was this time, so has
  3588. ; been clicked.
  3589.  st PLR1_clicked
  3590.  st PLR1_fire
  3591.  
  3592. .doneplr1:
  3593.  move.l PLR1s_tyoff,d0
  3594.  move.l PLR1s_yoff,d1
  3595.  move.l PLR1s_yvel,d2
  3596.  sub.l d1,d0
  3597.  bgt.s .aboveground
  3598.  sub.l #1024,d2
  3599.  blt.s .notfast
  3600.  sub.l #2048,d2
  3601. .notfast:
  3602.  add.l d2,d1
  3603.  sub.l d2,d0
  3604.  blt.s .pastitall
  3605.  move.l #0,d2
  3606.  add.l d0,d1
  3607.  bra.s .pastitall
  3608.  
  3609. .aboveground:
  3610.  add.l d2,d1
  3611.  add.l #1024,d2
  3612. .pastitall:
  3613.  
  3614.  move.l d2,PLR1s_yvel
  3615.  move.l d1,PLR1s_yoff
  3616.  
  3617.  rts
  3618.  
  3619. PLR1_follow_path:
  3620.  
  3621.  move.l pathpt,a0
  3622.  move.w (a0),d1
  3623.  move.w d1,PLR1s_xoff
  3624.  move.w 2(a0),d1
  3625.  move.w d1,PLR1s_zoff
  3626.  move.w 4(a0),d0
  3627.  add.w d0,d0
  3628.  and.w #8190,d0
  3629.  move.w d0,PLR1_angpos
  3630.  
  3631.  move.w TempFrames,d0
  3632.  asl.w #3,d0
  3633.  adda.w d0,a0
  3634.  
  3635.  cmp.l #endpath,a0
  3636.  blt notrestartpath
  3637.  move.l #Path,a0
  3638. notrestartpath:
  3639.  move.l a0,pathpt
  3640.  
  3641.  rts
  3642.  
  3643. OldSpace: dc.b 0
  3644. SpaceTapped: dc.b 0
  3645. SPCTAP: dc.b 0
  3646.  even
  3647.  
  3648. PLR1_keyboard_control:
  3649.  
  3650.  move.l #SineTable,a0
  3651.  move.w PLR1s_angpos,d0
  3652.  
  3653.  move.l #KeyMap,a5
  3654.  move.b $40(a5),d1
  3655.  beq.s nottapped
  3656.  tst.b OldSpace
  3657.  bne.s nottapped
  3658.  st SpaceTapped
  3659. nottapped:
  3660.  move.b d1,OldSpace
  3661.  
  3662.  move.w #70,d1
  3663.  move.w #7,d2
  3664.  tst.b $61(a5)
  3665.  beq.s nofaster
  3666.  move.w #120,d1
  3667.  move.w #10,d2
  3668. nofaster:
  3669.  
  3670.  moveq #0,d4 
  3671. ; tst.b $67(a5)
  3672. ; bne.s slidelr
  3673.  
  3674.  tst.b $4f(a5)
  3675.  beq.s noleftturn
  3676.  sub.w d1,d0
  3677. noleftturn
  3678.  move.l #KeyMap,a5
  3679.  tst.b $4e(a5)
  3680.  beq.s norightturn
  3681.  add.w d1,d0
  3682. norightturn
  3683. ; bra.s noslide
  3684.  
  3685. slidelr:
  3686.  tst.b $39(a5)
  3687.  beq.s noleftslide
  3688.  move.w d2,d4
  3689.  asr.w #1,d4
  3690. noleftslide
  3691.  move.l #KeyMap,a5
  3692.  tst.b $3a(a5)
  3693.  beq.s norightslide
  3694.  sub.w d2,d4
  3695.  asr.w #1,d4
  3696. norightslide
  3697.   
  3698. noslide:
  3699.   
  3700.  and.w #8191,d0
  3701.  move.w d0,PLR1s_angpos
  3702.  
  3703.  move.w (a0,d0.w),PLR1s_sinval
  3704.  adda.w #2048,a0
  3705.  move.w (a0,d0.w),PLR1s_cosval
  3706.  
  3707.  move.l PLR1s_xspdval,d6
  3708.  move.l PLR1s_zspdval,d7
  3709.  
  3710.  neg.l d6
  3711.  ble.s .nobug1
  3712.  asr.l #1,d6
  3713.  add.l #1,d6
  3714.  bra.s .bug1
  3715. .nobug1
  3716.  asr.l #1,d6
  3717. .bug1:
  3718.  
  3719.  neg.l d7
  3720.  ble.s .nobug2
  3721.  asr.l #1,d7
  3722.  add.l #1,d7
  3723.  bra.s .bug2
  3724. .nobug2
  3725.  asr.l #1,d7
  3726. .bug2: 
  3727.  
  3728.  moveq #0,d3
  3729.  
  3730.  tst.b $4c(a5)
  3731.  beq.s noforward
  3732.  neg.w d2
  3733.  move.w d2,d3
  3734.  
  3735. noforward:
  3736.  tst.b $4d(a5)
  3737.  beq.s nobackward
  3738.  move.w d2,d3
  3739. nobackward:
  3740.  
  3741.  move.w d3,d2
  3742.  asl.w #3,d2
  3743.  move.w d2,d1
  3744.  add.w d2,d1
  3745.  add.w d2,d1
  3746.  add.w Bobble,d1
  3747.  and.w #8190,d1
  3748.  move.w d1,Bobble
  3749.  
  3750.  move.w PLR1s_sinval,d1
  3751.  muls d3,d1
  3752.  move.w PLR1s_cosval,d2
  3753.  muls d3,d2
  3754.  
  3755.  sub.l d1,d6
  3756.  sub.l d2,d7
  3757.  move.w PLR1s_sinval,d1
  3758.  muls d4,d1
  3759.  move.w PLR1s_cosval,d2
  3760.  muls d4,d2
  3761.  sub.l d2,d6
  3762.  add.l d1,d7
  3763.  
  3764.  add.l d6,PLR1s_xspdval
  3765.  add.l d7,PLR1s_zspdval
  3766.  move.l PLR1s_xspdval,d6
  3767.  move.l PLR1s_zspdval,d7
  3768.  add.l d6,PLR1s_xoff
  3769.  add.l d7,PLR1s_zoff
  3770.  
  3771.  tst.b PLR1_fire
  3772.  beq.s .firenotpressed
  3773. ; fire was pressed last time.
  3774.  tst.b $65(a5)
  3775.  beq.s .firenownotpressed
  3776. ; fire is still pressed this time.
  3777.  st PLR1_fire
  3778.  bra .doneplr1
  3779.  
  3780. .firenownotpressed:
  3781. ; fire has been released.
  3782.  clr.b PLR1_fire
  3783.  bra .doneplr1
  3784.  
  3785. .firenotpressed
  3786.  
  3787. ; fire was not pressed last frame...
  3788.  
  3789.  tst.b $65(a5)
  3790. ; if it has still not been pressed, go back above
  3791.  beq.s .firenownotpressed
  3792. ; fire was not pressed last time, and was this time, so has
  3793. ; been clicked.
  3794.  st PLR1_clicked
  3795.  st PLR1_fire
  3796.  
  3797. .doneplr1:
  3798.  
  3799.  move.l PLR1s_tyoff,d0
  3800.  move.l PLR1s_yoff,d1
  3801.  move.l PLR1s_yvel,d2
  3802.  sub.l d1,d0
  3803.  bgt.s .aboveground
  3804.  sub.l #1024,d2
  3805.  blt.s .notfast
  3806.  sub.l #2048,d2
  3807. .notfast:
  3808.  add.l d2,d1
  3809.  sub.l d2,d0
  3810.  blt.s .pastitall
  3811.  move.l #0,d2
  3812.  add.l d0,d1
  3813.  bra.s .pastitall
  3814.  
  3815. .aboveground:
  3816.  add.l d2,d1
  3817.  add.l #1024,d2
  3818. .pastitall:
  3819.  
  3820.  move.l d2,PLR1s_yvel
  3821.  move.l d1,PLR1s_yoff
  3822.  
  3823.  rts
  3824.  
  3825. TEXT:
  3826. ;      0123456789012345
  3827.  dc.b '                '
  3828.  dc.b '  COMING  SOON  '
  3829.  dc.b '                '
  3830.  dc.b '                '
  3831.  dc.b 0
  3832.  dc.b '                '
  3833.  dc.b '      FROM      '
  3834.  dc.b '                '
  3835.  dc.b '                '
  3836.  dc.b 0
  3837.  dc.b '                '
  3838.  dc.b '    TEAM  17    '
  3839.  dc.b '                '
  3840.  dc.b '                '
  3841.  dc.b 0
  3842.  dc.b '                '
  3843.  dc.b ' ALIEN BREED 3D '
  3844.  dc.b '                '
  3845.  dc.b '                '
  3846.  dc.b 0
  3847.  dc.b ' PSYCHO  MUTANT '
  3848.  dc.b 'CYBORG ALIENS VS'
  3849.  dc.b 'SEVERAL THOUSAND'
  3850.  dc.b ' ROUNDS OF AMMO '
  3851.  dc.b 0
  3852.  dc.b ' ITS A FIGHT TO '
  3853.  dc.b ' THE DEATH AND  '
  3854.  dc.b 'THE ODDS ARE ON '
  3855.  dc.b '   THEIR SIDE   '
  3856.  dc.b 0
  3857.  dc.b '                '
  3858.  dc.b 'ONLY HEROES NEED'
  3859.  dc.b 'APPLY           '
  3860.  dc.b '                '
  3861.  dc.b 0
  3862.  dc.b '                '
  3863.  dc.b '                '
  3864.  dc.b '                '
  3865.  dc.b '                '
  3866.  dc.b 0
  3867.  dc.b ' TEAM 17 BRINGS '
  3868.  dc.b 'TO YOU THE FIRST'
  3869.  DC.B 'TRUE 3D TEXTURE '
  3870.  DC.B '  MAPPED WORLD  '
  3871.  DC.B 0
  3872.  DC.B 'FULL FREEDOM OF '
  3873.  DC.B ' MOVEMENT IN ALL'
  3874.  DC.B 'THREE DIMENSIONS'
  3875.  DC.B '                '
  3876.  DC.B 0
  3877.  DC.B 'VARIABLE HEIGHT '
  3878.  DC.B 'WALLS FLOORS AND'
  3879.  DC.B 'CEILINGS        '
  3880.  DC.B 'DOORS AND LIFTS '
  3881.  DC.B 0
  3882.  DC.B 'BUMP MAPPING ON '
  3883.  DC.B 'SOME CEILINGS   '
  3884.  DC.B 'PERFORATED WALLS'
  3885.  DC.B 'FOR FENCES      '
  3886.  DC.B 0
  3887.  DC.B 'LOADS OF WEAPONS'
  3888.  DC.B ' AND SOME TRULY '
  3889.  DC.B 'EVIL SMART BOMBS'
  3890.  DC.B '                '
  3891.  DC.B 0
  3892.  DC.B ' TEXTURE MAPPED '
  3893.  DC.B ' VECTOR OBJECTS '
  3894.  DC.B ' FOR DETAIL AND '
  3895.  DC.B '    SCENERY     '
  3896.  DC.B 0
  3897.  DC.B '                '
  3898.  DC.B 'RIPPLING TEXTURE'
  3899.  DC.B '  MAPPED WATER  '
  3900.  DC.B '                '
  3901.  DC.B 0
  3902.  DC.B '                '
  3903.  DC.B ' 4 OR 8 CHANNEL '
  3904.  DC.B ' SURROUND SOUND '
  3905.  DC.B '                '
  3906.  DC.B 0
  3907.  DC.B '   ONLY AMIGA   '
  3908.  DC.B '    MAKES IT    '
  3909.  DC.B '    POSSIBLE    '
  3910.  DC.B '                '
  3911.  DC.B 0
  3912.  DC.B '  ONLY TEAM 17  '
  3913.  DC.B '    MAKES IT    '
  3914.  DC.B '     HAPPEN     '
  3915.  DC.B '                '
  3916.  DC.B 0
  3917.  dc.b '                '
  3918.  dc.b '                '
  3919.  dc.b '                '
  3920.  dc.b '                '
  3921.  dcb.b 18*6+10,0
  3922.  dc.b -1
  3923.  
  3924.  
  3925. TEXTPTR: dc.l TEXT
  3926. ONSCRX: dc.w 0
  3927. ONSCRY: dc.w 0
  3928.  
  3929. Chan0inter:
  3930.  
  3931.  move.w #$0010,$dff000+intreq
  3932.  
  3933.  addq.w #1,FramesToDraw
  3934.  tst.b counting
  3935.  beq nostopcounter
  3936.  JSR STOPCOUNTNOADD
  3937. nostopcounter:
  3938.  movem.l d0-d7/a0-a6,-(a7)
  3939.  
  3940.  move.l TEXTPTR,a0
  3941.  move.l #TimerScr,a1
  3942.  subq #1,dispco
  3943.  ble donewpage
  3944.  move.w textcol,d0
  3945.  cmp.w #$fff,d0
  3946.  beq dontdonewpage
  3947.  add.w #$111,d0
  3948.  move.w d0,textcol
  3949.  bra dontdonewpage
  3950. donewpage:
  3951.  move.w textcol,d0
  3952.  cmp.w #$0,d0
  3953.  beq.s putcharonscr
  3954.  
  3955.  sub.w #$111,d0
  3956.  move.w d0,textcol
  3957.  bra dontdonewpage
  3958.  
  3959. putcharonscr:
  3960.  
  3961.  moveq #0,d0
  3962.  move.b (a0)+,d0
  3963.  bgt.s itsachar
  3964.  beq.s itsapause
  3965.   move.w #100,dispco
  3966.  move.w #0,ONSCRX
  3967.  move.w #0,ONSCRY
  3968.  move.l #TEXT,a0
  3969.  bra notachar
  3970.  
  3971. itsapause: 
  3972.  st backbeat
  3973.  move.w #100,dispco
  3974.  move.w #0,ONSCRX
  3975.  move.w #0,ONSCRY
  3976.  bra notachar
  3977. itsachar:
  3978.  move.l #charmap,a5
  3979.  move.b (a5,d0.w),d0
  3980.  muls #24*5,d0
  3981.  move.l #Font,a3
  3982.  add.l d0,a3
  3983.  move.w ONSCRX,d1
  3984.  move.w ONSCRY,d2
  3985.  add.w d1,d2
  3986.  adda.w d2,a1
  3987.  move.w #23,d7
  3988. dochar
  3989.  move.b (a3)+,(a1)
  3990.  move.b (a3)+,1(a1)
  3991.  move.b (a3)+,2(a1)
  3992.  move.b (a3)+,3(a1)
  3993.  move.b (a3)+,4(a1)
  3994.  adda.w #80,a1
  3995.  dbra d7,dochar
  3996.  add.w #5,d1
  3997.  cmp.w #80,d1
  3998.  blt nonewlinec
  3999.  move.w #0,d1
  4000.  add.w #80*24,ONSCRY
  4001. nonewlinec
  4002.  move.w d1,ONSCRX
  4003.  
  4004. notachar:
  4005.  
  4006.  move.l a0,TEXTPTR
  4007. dontdonewpage:
  4008.  
  4009.  tst.b oktodisplay
  4010.  bra dontshowtime
  4011.  clr.b oktodisplay
  4012.  subq.w #1,dispco
  4013.  bgt dontshowtime
  4014.  move.w #10,dispco
  4015.  
  4016.  move.l #TimerScr+10,a0
  4017.  move.l TimeCount,d0
  4018.  bge.s timenotneg
  4019.  move.l #1111*256,d0
  4020. timenotneg:
  4021.  asr.l #8,d0
  4022.  move.l #digits,a1
  4023.  move.w #7,d2
  4024. digitlop
  4025.  divs #10,d0
  4026.  swap d0
  4027.  lea (a1,d0.w*8),a2
  4028.  move.b (a2)+,(a0)
  4029.  move.b (a2)+,24(a0)
  4030.  move.b (a2)+,24*2(a0)
  4031.  move.b (a2)+,24*3(a0)
  4032.  move.b (a2)+,24*4(a0)
  4033.  move.b (a2)+,24*5(a0)
  4034.  move.b (a2)+,24*6(a0)
  4035.  move.b (a2)+,24*7(a0)
  4036.  subq #1,a0
  4037.  swap d0
  4038.  ext.l d0
  4039.  dbra d2,digitlop
  4040.  
  4041.  move.l #TimerScr+10+24*10,a0
  4042.  move.l NumTimes,d0
  4043.  move.l #digits,a1
  4044.  move.w #3,d2
  4045. digitlop2
  4046.  divs #10,d0
  4047.  swap d0
  4048.  lea (a1,d0.w*8),a2
  4049.  move.b (a2)+,(a0)
  4050.  move.b (a2)+,24(a0)
  4051.  move.b (a2)+,24*2(a0)
  4052.  move.b (a2)+,24*3(a0)
  4053.  move.b (a2)+,24*4(a0)
  4054.  move.b (a2)+,24*5(a0)
  4055.  move.b (a2)+,24*6(a0)
  4056.  move.b (a2)+,24*7(a0)
  4057.  subq #1,a0
  4058.  swap d0
  4059.  ext.l d0
  4060.  dbra d2,digitlop2
  4061.  
  4062.  move.l #TimerScr+10+24*20,a0
  4063.  moveq #0,d0
  4064.  move.w FramesToDraw,d0
  4065.  move.l #digits,a1
  4066.  move.w #2,d2
  4067. digitlop3
  4068.  divs #10,d0
  4069.  swap d0
  4070.  lea (a1,d0.w*8),a2
  4071.  move.b (a2)+,(a0)
  4072.  move.b (a2)+,24(a0)
  4073.  move.b (a2)+,24*2(a0)
  4074.  move.b (a2)+,24*3(a0)
  4075.  move.b (a2)+,24*4(a0)
  4076.  move.b (a2)+,24*5(a0)
  4077.  move.b (a2)+,24*6(a0)
  4078.  move.b (a2)+,24*7(a0)
  4079.  subq #1,a0
  4080.  swap d0
  4081.  ext.l d0
  4082.  dbra d2,digitlop3
  4083.  
  4084. dontshowtime:
  4085.  
  4086.  move.w Robotanimpos,d0
  4087.  add.w #6*38,d0
  4088.  cmp.w #6*38*64,d0
  4089.  blt.s norebot
  4090.  move.w #0,d0
  4091. norebot:
  4092.  move.w d0,Robotanimpos
  4093.  
  4094.  tst.w d0
  4095.  seq d1
  4096.  cmp.w #6*32*38,d0
  4097.  seq d2
  4098.  or.b d2,d1
  4099.  or.b d1,clump
  4100.  
  4101.  move.w Robotarmpos,d0
  4102.  add.w #6*14,d0
  4103.  cmp.w #6*14*64,d0
  4104.  blt.s norebot2
  4105.  move.w #0,d0
  4106. norebot2:
  4107.  move.w d0,Robotarmpos
  4108.  
  4109.  move.l alanptr,a0
  4110.  move.l (a0)+,alframe
  4111.  cmp.l #endalan,a0
  4112.  blt.s nostartalan
  4113.  move.l #alan,a0
  4114. nostartalan:
  4115.  move.l a0,alanptr
  4116.  
  4117.  move.l #$dff000,a6
  4118.  
  4119.  cmp.b #'4',option+2
  4120.  bne.s nomuckabout
  4121.  
  4122.  move.w #$0,d0 
  4123.  tst.b NoiseMade0
  4124.  beq.s noturnoff0
  4125.  move.w #1,d0
  4126. noturnoff0:
  4127.  tst.b NoiseMade1
  4128.  beq.s noturnoff1
  4129.  or.w #2,d0
  4130. noturnoff1:
  4131.  tst.b NoiseMade2
  4132.  beq.s noturnoff2
  4133.  or.w #4,d0
  4134. noturnoff2:
  4135.  tst.b NoiseMade3
  4136.  beq.s noturnoff3
  4137.  or.w #8,d0
  4138. noturnoff3:
  4139.  move.w d0,dmacon(a6)
  4140.  
  4141. nomuckabout:
  4142.  
  4143. ; tst.b PLR1MOUSE
  4144. ; beq.s PLR1_nomouse
  4145. ; bsr PLR1_mouse_control
  4146. ;PLR1_nomouse:
  4147. ; tst.b PLR1KEYS
  4148. ; beq.s PLR1_nokeys
  4149. ; bsr PLR1_keyboard_control
  4150. ;PLR1_nokeys:
  4151. ; tst.b PLR1PATH
  4152. ; beq.s PLR1_nopath
  4153. ; bsr PLR1_follow_path
  4154. ;PLR1_nopath:
  4155.  
  4156.  
  4157.  tst.b PLR2_fire
  4158.  beq.s firenotpressed2
  4159. ; fire was pressed last time.
  4160.  btst #7,$bfe001
  4161.  bne.s firenownotpressed2
  4162. ; fire is still pressed this time.
  4163.  st PLR2_fire
  4164.  bra dointer
  4165.  
  4166. firenownotpressed2:
  4167. ; fire has been released.
  4168.  clr.b PLR2_fire
  4169.  bra dointer
  4170.  
  4171. firenotpressed2
  4172.  
  4173. ; fire was not pressed last frame...
  4174.  
  4175.  btst #7,$bfe001
  4176. ; if it has still not been pressed, go back above
  4177.  bne.s firenownotpressed2
  4178. ; fire was not pressed last time, and was this time, so has
  4179. ; been clicked.
  4180.  st PLR2_clicked
  4181.  st PLR2_fire
  4182.  
  4183. dointer
  4184.  
  4185.  cmp.b #'4',option+2
  4186.  beq fourchannel
  4187.  
  4188.  btst #7,$dff000+intreqrl
  4189.  bne.s newsampbitl
  4190.  
  4191.  movem.l (a7)+,d0-d7/a0-a6
  4192.  tst.b counting
  4193.  beq .nostartcounter
  4194.  JSR STARTCOUNT
  4195. .nostartcounter:
  4196. noneed:
  4197.  
  4198.  rte
  4199.  
  4200. swappedem: dc.w 0
  4201.  
  4202. newsampbitl:
  4203.  
  4204.  move.w #$820f,$dff000+dmacon
  4205.  
  4206.  move.w #$80,$dff000+intreq
  4207.  
  4208.  move.l pos0,a0
  4209.  move.l pos1,a1
  4210.  
  4211.  move.l #tab,a2
  4212.  
  4213.  moveq #0,d0
  4214.  moveq #0,d1
  4215.  move.b vol0left,d0
  4216.  move.b vol1left,d1
  4217.  cmp.b d1,d0
  4218.  bge.s fbig0
  4219.  
  4220. ; d1 is bigger so scale d0 and use d1
  4221. ; as audiochannel volume.
  4222.  
  4223.  exg a0,a1
  4224.  asl.w #6,d0
  4225.  divs d1,d0
  4226.  lsl.w #8,d0
  4227.  adda.w d0,a2
  4228.  move.w d1,$dff0a8
  4229.  bra.s donechan0
  4230.  
  4231. fbig0:
  4232.  tst.w d0
  4233.  beq.s donechan0
  4234.  asl.w #6,d1
  4235.  divs d0,d1
  4236.  lsl.w #8,d1
  4237.  adda.w d1,a2
  4238.  move.w d0,$dff0a8
  4239.  
  4240. donechan0:
  4241.  
  4242.  
  4243.  move.l Aupt0,a3
  4244.  move.l a3,$dff0a0
  4245.  move.l Auback0,Aupt0
  4246.  move.l a3,Auback0
  4247.  
  4248.  move.l Auback0,a3
  4249.  
  4250.  moveq #0,d0
  4251.  moveq #0,d1
  4252.  moveq #0,d2
  4253.  moveq #0,d3
  4254.  moveq #0,d4
  4255.  moveq #0,d5
  4256.  move.w #49,d7
  4257. loop:
  4258.  move.l (a0)+,d0
  4259.  move.b (a1)+,d1
  4260.  move.b (a1)+,d2
  4261.  move.b (a1)+,d3
  4262.  move.b (a1)+,d4
  4263.  move.b (a2,d3.w),d5
  4264.  swap d5
  4265.  move.b (a2,d1.w),d5
  4266.  asl.l #8,d5
  4267.  move.b (a2,d2.w),d5
  4268.  swap d5
  4269.  move.b (a2,d4.w),d5
  4270.  add.l d5,d0
  4271.  move.l d0,(a3)+
  4272.  dbra d7,loop
  4273.  
  4274.  move.l pos0,a0
  4275.  move.l pos1,a1
  4276.  
  4277.  move.l Aupt1,a3
  4278.  move.l a3,$dff0b0
  4279.  move.l Auback1,Aupt1
  4280.  move.l a3,Auback1
  4281.  
  4282.  move.l #tab,a2
  4283.  
  4284.  moveq #0,d0
  4285.  moveq #0,d1
  4286.  move.b vol0right,d0
  4287.  move.b vol1right,d1
  4288.  cmp.b d1,d0
  4289.  slt swappedem
  4290.  bge.s fbig1
  4291.  
  4292. ; d1 is bigger so scale d0 and use d1
  4293. ; as audiochannel volume.
  4294.  
  4295.  exg a0,a1
  4296.  asl.w #6,d0
  4297.  divs d1,d0
  4298.  lsl.w #8,d0
  4299.  adda.w d0,a2
  4300.  move.w d1,$dff0b8
  4301.  bra.s donechan1
  4302.  
  4303. fbig1:
  4304.  tst.w d0
  4305.  beq.s donechan1
  4306.  asl.w #6,d1
  4307.  divs d0,d1
  4308.  lsl.w #8,d1
  4309.  adda.w d1,a2
  4310.  move.w d0,$dff0b8
  4311.  
  4312. donechan1:
  4313.  moveq #0,d0
  4314.  moveq #0,d1
  4315.  moveq #0,d2
  4316.  moveq #0,d3
  4317.  moveq #0,d4
  4318.  moveq #0,d5
  4319.  move.w #49,d7
  4320. loop2:
  4321.  move.l (a0)+,d0
  4322.  move.b (a1)+,d1
  4323.  move.b (a1)+,d2
  4324.  move.b (a1)+,d3
  4325.  move.b (a1)+,d4
  4326.  move.b (a2,d3.w),d5
  4327.  swap d5
  4328.  move.b (a2,d1.w),d5
  4329.  asl.l #8,d5
  4330.  move.b (a2,d2.w),d5
  4331.  swap d5
  4332.  move.b (a2,d4.w),d5
  4333.  add.l d5,d0
  4334.  move.l d0,(a3)+
  4335.  dbra d7,loop2
  4336.  
  4337.  tst.b swappedem
  4338.  beq.s ok01
  4339.  exg a0,a1
  4340. ok01:
  4341.  
  4342.  cmp.l Samp0end,a0
  4343.  blt.s notoffendsamp1
  4344.  move.l #bass,a0
  4345.  move.l #bassend,Samp0end
  4346.  move.b #64,vol0left
  4347.  move.b #64,vol0right
  4348.  tst.b backbeat
  4349.  bne.s playbeat
  4350.  move.l #empty,a0
  4351.  move.l #emptyend,Samp0end
  4352.  move.b #0,vol0left
  4353.  move.b #0,vol0right
  4354. playbeat:
  4355. notoffendsamp1:
  4356.  
  4357.  cmp.l Samp1end,a1
  4358.  blt.s notoffendsamp2
  4359.  move.l #empty,a1
  4360.  move.l #emptyend,Samp1end
  4361.  move.b #0,vol1left
  4362.  move.b #0,vol1right
  4363. notoffendsamp2:
  4364.  
  4365.  move.l a0,pos0
  4366.  move.l a1,pos1
  4367.  
  4368. ******************* Other two channels
  4369.  
  4370.  move.l pos2,a0
  4371.  move.l pos3,a1
  4372.  
  4373.  move.l #tab,a2
  4374.  
  4375.  moveq #0,d0
  4376.  moveq #0,d1
  4377.  move.b vol2left,d0
  4378.  move.b vol3left,d1
  4379.  cmp.b d1,d0
  4380.  bge.s fbig2
  4381.  
  4382. ; d1 is bigger so scale d0 and use d1
  4383. ; as audiochannel volume.
  4384.  
  4385.  exg a0,a1
  4386.  asl.w #6,d0
  4387.  divs d1,d0
  4388.  lsl.w #8,d0
  4389.  adda.w d0,a2
  4390.  move.w d1,$dff0d8
  4391.  bra.s donechan2
  4392.  
  4393. fbig2:
  4394.  tst.w d0
  4395.  beq.s donechan2
  4396.  asl.w #6,d1
  4397.  divs d0,d1
  4398.  lsl.w #8,d1
  4399.  adda.w d1,a2
  4400.  move.w d0,$dff0d8
  4401.  
  4402. donechan2:
  4403.  
  4404.  move.l Aupt2,a3
  4405.  move.l a3,$dff0d0
  4406.  move.l Auback2,Aupt2
  4407.  move.l a3,Auback2
  4408.  
  4409.  moveq #0,d0
  4410.  moveq #0,d1
  4411.  moveq #0,d2
  4412.  moveq #0,d3
  4413.  moveq #0,d4
  4414.  moveq #0,d5
  4415.  move.w #49,d7
  4416. loop3:
  4417.  move.l (a0)+,d0
  4418.  move.b (a1)+,d1
  4419.  move.b (a1)+,d2
  4420.  move.b (a1)+,d3
  4421.  move.b (a1)+,d4
  4422.  move.b (a2,d3.w),d5
  4423.  swap d5
  4424.  move.b (a2,d1.w),d5
  4425.  asl.l #8,d5
  4426.  move.b (a2,d2.w),d5
  4427.  swap d5
  4428.  move.b (a2,d4.w),d5
  4429.  add.l d5,d0
  4430.  move.l d0,(a3)+
  4431.  dbra d7,loop3
  4432.  
  4433.  move.l pos2,a0
  4434.  move.l pos3,a1
  4435.  
  4436.  move.l Aupt3,a3
  4437.  move.l a3,$dff0c0
  4438.  move.l Auback3,Aupt3
  4439.  move.l a3,Auback3
  4440.  
  4441.  move.l #tab,a2
  4442.  
  4443.  moveq #0,d0
  4444.  moveq #0,d1
  4445.  move.b vol2right,d0
  4446.  move.b vol3right,d1
  4447.  cmp.b d1,d0
  4448.  slt.s swappedem
  4449.  bge.s fbig3
  4450.  
  4451.  exg a0,a1
  4452.  asl.w #6,d0
  4453.  divs d1,d0
  4454.  lsl.w #8,d0
  4455.  adda.w d0,a2
  4456.  move.w d1,$dff0c8
  4457.  bra.s donechan3
  4458.  
  4459. fbig3:
  4460.  tst.w d0
  4461.  beq.s donechan3
  4462.  asl.w #6,d1
  4463.  divs d0,d1
  4464.  lsl.w #8,d1
  4465.  adda.w d1,a2
  4466.  move.w d0,$dff0c8
  4467. donechan3:
  4468.  
  4469.  moveq #0,d0
  4470.  moveq #0,d1
  4471.  moveq #0,d2
  4472.  moveq #0,d3
  4473.  moveq #0,d4
  4474.  moveq #0,d5
  4475.  move.w #49,d7
  4476. loop4:
  4477.  move.l (a0)+,d0
  4478.  move.b (a1)+,d1
  4479.  move.b (a1)+,d2
  4480.  move.b (a1)+,d3
  4481.  move.b (a1)+,d4
  4482.  move.b (a2,d3.w),d5
  4483.  swap d5
  4484.  move.b (a2,d1.w),d5
  4485.  asl.l #8,d5
  4486.  move.b (a2,d2.w),d5
  4487.  swap d5
  4488.  move.b (a2,d4.w),d5
  4489.  add.l d5,d0
  4490.  move.l d0,(a3)+
  4491.  dbra d7,loop4
  4492.  
  4493.  tst.b swappedem
  4494.  beq.s ok23
  4495.  exg a0,a1
  4496. ok23:
  4497.  
  4498.  cmp.l Samp2end,a0
  4499.  blt.s notoffendsamp3
  4500.  move.l #empty,a0
  4501.  move.l #emptyend,Samp2end
  4502.  move.b #0,vol2left
  4503.  move.b #0,vol2right
  4504. notoffendsamp3:
  4505.  
  4506.  cmp.l Samp3end,a1
  4507.  blt.s notoffendsamp4
  4508.  move.l #empty,a1
  4509.  move.l #emptyend,Samp3end
  4510.  move.b #0,vol3left
  4511.  move.b #0,vol3right
  4512. notoffendsamp4:
  4513.  
  4514.  move.l a0,pos2
  4515.  move.l a1,pos3
  4516.  
  4517.  movem.l (a7)+,d0-d7/a0-a6
  4518.  tst.b counting
  4519.  beq .nostartcounter
  4520.  JSR STARTCOUNT
  4521. .nostartcounter:
  4522.  
  4523.  rte
  4524.  
  4525. ***********************************
  4526. * 4 channel sound routine
  4527. ***********************************
  4528.  
  4529. bassloop:
  4530.  dc.l bass
  4531.  dc.l bass2
  4532.  dc.l bass
  4533.  dc.l bass3
  4534. endbass:
  4535. bassptr: dc.l bassloop
  4536.  
  4537. fourchannel:
  4538.  
  4539.  btst #7,intreqrl(a6)
  4540.  beq.s nofinish0
  4541.  tst.b backbeat
  4542.  beq.s nobeat
  4543.  
  4544.  move.l bassptr,a0
  4545.  move.l (a0)+,$a0(a6)
  4546.  move.w #15900/2,$a4(a6)
  4547.  move.w #64,$a8(a6)
  4548.  cmp.l #endbass,a0
  4549.  blt.s norestbass
  4550.  move.l #bassloop,a0
  4551. norestbass
  4552.  move.l a0,bassptr
  4553.  bra somebeat
  4554. nobeat:
  4555.  move.l #null,$a0(a6)
  4556.  move.w #100,$a4(a6)
  4557.  
  4558. somebeat:
  4559.  move.w #$0080,intreq(a6)
  4560. nofinish0:
  4561.  
  4562.  
  4563.  
  4564.  tst.b NoiseMade0p
  4565.  beq.s NoChan0sound
  4566.  
  4567.  move.l Samp0end,d0
  4568.  move.l pos0,d1
  4569.  sub.l d1,d0
  4570.  asr.w #1,d0
  4571.  move.w d0,$a4(a6)
  4572.  move.l d1,$a0(a6)
  4573.  move.w #$8201,dmacon(a6)
  4574.  moveq #0,d0
  4575.  move.b vol0left,d0
  4576.  add.b vol0right,d0
  4577.  asr.b #1,d0
  4578.  move.w d0,$a8(a6)
  4579.  
  4580. NoChan0sound:
  4581.  
  4582.  btst #0,intreqr(a6)
  4583.  beq.s nofinish1
  4584.  move.l #null,$b0(a6)
  4585.  move.w #100,$b4(a6)
  4586.  move.w #$0100,intreq(a6)
  4587. nofinish1:
  4588.  
  4589.  tst.b NoiseMade1p
  4590.  beq.s NoChan1sound
  4591.  
  4592.  move.l Samp1end,d0
  4593.  move.l pos1,d1
  4594.  sub.l d1,d0
  4595.  asr.w #1,d0
  4596.  move.w d0,$b4(a6)
  4597.  move.l d1,$b0(a6)
  4598.  move.w #$8202,dmacon(a6)
  4599.  moveq #0,d0
  4600.  move.b vol1left,d0
  4601.  add.b vol1right,d0
  4602.  asr.b #1,d0
  4603.  move.w d0,$b8(a6)
  4604.  
  4605. NoChan1sound:
  4606.  
  4607.  
  4608.  btst #1,intreqr(a6)
  4609.  beq.s nofinish2
  4610.  move.l #null,$c0(a6)
  4611.  move.w #100,$c4(a6)
  4612.  move.w #$0200,intreq(a6)
  4613. nofinish2:
  4614.  
  4615.  tst.b NoiseMade2p
  4616.  beq.s NoChan2sound
  4617.  
  4618.  move.l Samp2end,d0
  4619.  move.l pos2,d1
  4620.  sub.l d1,d0
  4621.  asr.w #1,d0
  4622.  move.w d0,$c4(a6)
  4623.  move.l d1,$c0(a6)
  4624.  move.w #$8204,dmacon(a6)
  4625.  moveq #0,d0
  4626.  move.b vol2left,d0
  4627.  add.b vol2right,d0
  4628.  asr.b #1,d0
  4629.  move.w d0,$c8(a6)
  4630.  
  4631. NoChan2sound:
  4632.  
  4633.  btst #2,intreqr(a6)
  4634.  beq.s nofinish3
  4635.  move.l #null,$d0(a6)
  4636.  move.w #100,$d4(a6)
  4637.  move.w #$0400,intreq(a6)
  4638. nofinish3:
  4639.  
  4640.  tst.b NoiseMade3p
  4641.  beq.s NoChan3sound
  4642.  
  4643.  move.l Samp3end,d0
  4644.  move.l pos3,d1
  4645.  sub.l d1,d0
  4646.  asr.w #1,d0
  4647.  move.w d0,$d4(a6)
  4648.  move.l d1,$d0(a6)
  4649.  move.w #$8208,dmacon(a6)
  4650.  moveq #0,d0
  4651.  move.b vol2left,d0
  4652.  add.b vol2right,d0
  4653.  asr.b #1,d0
  4654.  move.w d0,$d8(a6)
  4655.  
  4656. NoChan3sound:
  4657.  
  4658. nomorechannels:
  4659.  
  4660.  move.l NoiseMade0,NoiseMade0p
  4661.  move.l #0,NoiseMade0
  4662.  
  4663.  movem.l (a7)+,d0-d7/a0-a6
  4664.  tst.b counting
  4665.  beq .nostartcounter
  4666.  JSR STARTCOUNT
  4667. .nostartcounter:
  4668.  
  4669.  rte
  4670.  
  4671. backbeat: dc.w 0
  4672.  
  4673. Samp0end: dc.l emptyend
  4674. Samp1end: dc.l emptyend
  4675. Samp2end: dc.l emptyend
  4676. Samp3end: dc.l emptyend
  4677.  
  4678. Aupt0: dc.l null
  4679. Auback0: dc.l null+500
  4680. Aupt2: dc.l null3
  4681. Auback2: dc.l null3+500
  4682. Aupt3: dc.l null4
  4683. Auback3: dc.l null4+500
  4684. Aupt1: dc.l null2
  4685. Auback1: dc.l null2+500
  4686.  
  4687. NoiseMade0: dc.b 0
  4688. NoiseMade1: dc.b 0
  4689. NoiseMade2: dc.b 0
  4690. NoiseMade3: dc.b 0
  4691. NoiseMade0p: dc.b 0
  4692. NoiseMade1p: dc.b 0
  4693. NoiseMade2p: dc.b 0
  4694. NoiseMade3p: dc.b 0
  4695.  
  4696. empty: ds.l 100
  4697. emptyend:
  4698.  
  4699. **************************************
  4700. * I want a routine to calculate all the
  4701. * info needed for the sound player to
  4702. * work, given say position of noise, volume
  4703. * and sample number.
  4704.  
  4705. Samplenum: dc.w 0
  4706. Noisex: dc.w 0
  4707. Noisez: dc.w 0
  4708. Noisevol: dc.w 0
  4709. chanpick: dc.w 0
  4710.  
  4711. PLAYEDTAB: ds.l 20
  4712.  
  4713. MakeSomeNoise:
  4714.  
  4715.  move.w Noisex,d1
  4716.  muls d1,d1
  4717.  move.w Noisez,d2
  4718.  muls d2,d2
  4719.  move.w #64,d3
  4720.  moveq #1,d0
  4721.  add.l d1,d2
  4722.  beq pastcalc
  4723.  
  4724.  move.w #31,d0
  4725. .findhigh
  4726.  btst d0,d2
  4727.  bne .foundhigh
  4728.  dbra d0,.findhigh
  4729. .foundhigh
  4730.  asr.w #1,d0
  4731.  clr.l d3
  4732.  bset d0,d3
  4733.  move.l d3,d0
  4734.  
  4735.  move.w d0,d3
  4736.  muls d3,d3    ; x*x
  4737.  sub.l d2,d3    ; x*x-a
  4738.  asr.l #1,d3    ; (x*x-a)/2
  4739.  divs d0,d3    ; (x*x-a)/2x
  4740.  sub.w d3,d0    ; second approx
  4741.  bgt .stillnot0
  4742.  move.w #1,d0
  4743. .stillnot0
  4744.  
  4745.  move.w d0,d3
  4746.  muls d3,d3
  4747.  sub.l d2,d3
  4748.  asr.l #1,d3
  4749.  divs d0,d3
  4750.  sub.w d3,d0    ; second approx
  4751.  bgt .stillnot02
  4752.  move.w #1,d0
  4753. .stillnot02
  4754.  
  4755.  move.w #64,d3
  4756.  muls Noisevol,d3
  4757.  asr.w #1,d0
  4758.  addq #1,d0
  4759.  divs d0,d3
  4760.  
  4761.  cmp.w #64,d3
  4762.  ble.s notooloud
  4763.  move.w #64,d3
  4764. notooloud:
  4765.  
  4766. pastcalc:
  4767.  
  4768.     ; d3 contains volume of noise.
  4769.     
  4770.  move.w d3,d4
  4771.  
  4772.  move.w d3,d2
  4773.  muls Noisex,d2
  4774.  add.w d0,d0
  4775.  divs d0,d2
  4776.  
  4777.  bgt.s quietleft
  4778.  add.w d2,d4
  4779.  bge.s donequiet
  4780.  move.w #0,d4
  4781.  bra.s donequiet
  4782. quietleft:
  4783.  sub.w d2,d3
  4784.  bge.s donequiet
  4785.  move.w #0,d3
  4786. donequiet:
  4787.  
  4788. ; d3=leftvol?
  4789. ; d4=rightvol?
  4790.  
  4791.  move.l #SampleList,a3
  4792.  
  4793.  tst.b chanpick
  4794.  seq NoiseMade0
  4795.  beq.s chan0
  4796.  cmp.b #1,chanpick
  4797.  seq NoiseMade1
  4798.  beq chan1
  4799.  cmp.b #2,chanpick
  4800.  seq NoiseMade2
  4801.  beq chan2
  4802.  st NoiseMade3
  4803.  
  4804.  move.w Samplenum,d0
  4805.  move.l (a3,d0.w*8),a1
  4806.  move.l 4(a3,d0.w*8),a2
  4807.  
  4808.  tst.b notifplaying
  4809.  beq.s .play
  4810.  cmp.l Samp3end,a2
  4811.  bne.s .play
  4812.  rts
  4813. .play
  4814.  
  4815.  move.b d0,PLAYEDTAB+9
  4816.  move.b d3,PLAYEDTAB+1+9
  4817.  move.b d4,PLAYEDTAB+2+9
  4818.  move.b d3,vol3left
  4819.  move.b d4,vol3right
  4820.  move.l a1,pos3
  4821.  move.l a2,Samp3end
  4822.  
  4823.  rts
  4824.  
  4825. chan0: 
  4826.  move.w Samplenum,d0
  4827.  
  4828.  move.l (a3,d0.w*8),a1
  4829.  move.l 4(a3,d0.w*8),a2
  4830.  tst.b notifplaying
  4831.  beq.s .play
  4832.  cmp.l Samp0end,a2
  4833.  bne.s .play
  4834.  rts
  4835. .play
  4836.  move.b d0,PLAYEDTAB
  4837.  move.b d3,PLAYEDTAB+1
  4838.  move.b d4,PLAYEDTAB+2
  4839.  move.l a1,pos0
  4840.  move.l a2,Samp0end
  4841.  move.b d3,vol0left
  4842.  move.b d4,vol0right
  4843.  
  4844.  rts
  4845.  
  4846. chan1:
  4847.  
  4848.  move.w Samplenum,d0
  4849.  move.l (a3,d0.w*8),a1
  4850.  move.l 4(a3,d0.w*8),a2
  4851.  tst.b notifplaying
  4852.  beq.s .play
  4853.  cmp.l Samp1end,a2
  4854.  bne.s .play
  4855.  rts
  4856. .play
  4857.  move.b d0,PLAYEDTAB+3
  4858.  move.b d3,PLAYEDTAB+1+3
  4859.  move.b d4,PLAYEDTAB+2+3
  4860.  move.b d3,vol1left
  4861.  move.b d4,vol1right
  4862.  move.l a1,pos1
  4863.  move.l a2,Samp1end
  4864.  
  4865.  rts
  4866.  
  4867. chan2: 
  4868.  move.w Samplenum,d0
  4869.  move.l (a3,d0.w*8),a1
  4870.  move.l 4(a3,d0.w*8),a2
  4871.  tst.b notifplaying
  4872.  beq.s .play
  4873.  cmp.l Samp2end,a2
  4874.  bne.s .play
  4875.  rts
  4876. .play
  4877.  move.b d0,PLAYEDTAB+6
  4878.  move.b d3,PLAYEDTAB+1+6
  4879.  move.b d4,PLAYEDTAB+2+6
  4880.  move.l a1,pos2
  4881.  move.l a2,Samp2end
  4882.  move.b d3,vol2left
  4883.  move.b d4,vol2right
  4884.  
  4885.  rts
  4886.  
  4887. SampleList
  4888.  dc.l Scream,EndScream
  4889.  dc.l Shoot,EndShoot
  4890.  dc.l Munch,EndMunch
  4891.  dc.l PooGun,EndPooGun
  4892.  dc.l Collect,EndCollect
  4893.  dc.l DoorNoise,EndDoorNoise
  4894.  dc.l bass,bassend
  4895.  dc.l Stomp,EndStomp
  4896.  dc.l LowScream,EndLowScream
  4897.  dc.l BaddieGun,EndBaddieGun
  4898.  dc.l SwitchNoise,EndSwitch
  4899.  
  4900. saveinters:  
  4901.  dc.w 0
  4902.  
  4903. z: dc.w 10
  4904.  
  4905. notifplaying:
  4906.  dc.w 0
  4907.  
  4908. audpos1: dc.w 0
  4909. audpos1b: dc.w 0
  4910. audpos2: dc.w 0
  4911. audpos2b: dc.w 0
  4912. audpos3: dc.w 0
  4913. audpos3b: dc.w 0
  4914. audpos4: dc.w 0
  4915. audpos4b: dc.w 0
  4916.  
  4917. vol0left: dc.w 0
  4918. vol0right: dc.w 0
  4919. vol1left: dc.w 0
  4920. vol1right: dc.w 0
  4921. vol2left: dc.w 0
  4922. vol2right: dc.w 0
  4923. vol3left: dc.w 0
  4924. vol3right: dc.w 0
  4925.  
  4926. pos: dc.l 0
  4927.  
  4928. pos0: dc.l empty
  4929. pos1: dc.l empty
  4930. pos2: dc.l empty
  4931. pos3: dc.l empty
  4932.  
  4933.  
  4934. numtodo dc.w 0
  4935.  
  4936. npt: dc.w 0
  4937.  
  4938. pretab:
  4939. val SET 0
  4940.  REPT 128
  4941.  dc.b val
  4942. val SET val+1
  4943.  ENDR
  4944. val SET -128
  4945.  REPT 128
  4946.  dc.b val
  4947. val SET val+1
  4948.  ENDR 
  4949.  
  4950. tab:
  4951.  ds.b 256*65
  4952.  
  4953.  
  4954. test: dc.l 0
  4955.  ds.l 30
  4956.  
  4957.  even
  4958. ConstCols:
  4959.  incbin "ConstCols"
  4960.  even
  4961. Smoothscalecols:
  4962. ; incbin "smoothbumppalscaled"
  4963.  even
  4964. SmoothTile:
  4965. ; incbin "smoothbumptile"
  4966.  even
  4967. Bumpscalecols:
  4968.  incbin "Bumppalscaled"
  4969.  even
  4970. Bumptile:
  4971.  incbin "bumptile"
  4972.  even
  4973. scalecols: incbin "bytepixpalscaled"
  4974.  even
  4975. floorscalecols: incbin "floorpalscaled"
  4976.  even
  4977. walltiles:
  4978.  incbin "bytepixfile"
  4979.  even
  4980. floortile:
  4981.  incbin "floortile" 
  4982.  even
  4983. wallrouts:
  4984. ; incbin "2x2WallDraw" 
  4985.  CNOP 0,64
  4986. BackPicture:
  4987.  incbin "backfile"
  4988. EndBackPicture:
  4989.  
  4990. drawpt: dc.l colbars2
  4991. olddrawpt: dc.l colbars
  4992. frompt: dc.l 0 
  4993.  
  4994. SineTable:
  4995.  incbin "bigsine"
  4996.  
  4997. angpos: dc.w 0
  4998. angspd: dc.w 0
  4999. flooryoff: dc.w 0
  5000. xoff: dc.l 0
  5001. yoff: dc.l 0
  5002. yvel: dc.l 0
  5003. zoff: dc.l 0
  5004. tyoff: dc.l 0
  5005. xspdval: dc.l 0
  5006. zspdval: dc.l 0
  5007. Zone: dc.w 0
  5008.  
  5009. PLR1: dc.b $ff
  5010.  even
  5011. PLR1_cosval: dc.w 0
  5012. PLR1_sinval: dc.w 0
  5013. PLR1_angpos: dc.w 0
  5014. PLR1_angspd: dc.w 0
  5015. PLR1_xoff: dc.l 0
  5016. PLR1_yoff: dc.l 0
  5017. PLR1_yvel: dc.l 0
  5018. PLR1_zoff: dc.l 0
  5019. PLR1_tyoff: dc.l 0
  5020. PLR1_xspdval: dc.l 0
  5021. PLR1_zspdval: dc.l 0
  5022. PLR1_Zone: dc.w 0
  5023. PLR1_Roompt: dc.l 0
  5024. PLR1_OldRoompt: dc.l 0
  5025. PLR1_PointsToRotatePtr: dc.l 0
  5026. PLR1_ListOfGraphRooms: dc.l 0
  5027. PLR1_oldxoff: dc.l 0
  5028. PLR1_oldzoff: dc.l 0
  5029.  
  5030.  ds.w 4
  5031.  
  5032. PLR1s_cosval: dc.w 0
  5033. PLR1s_sinval: dc.w 0
  5034. PLR1s_angpos: dc.w 0
  5035. PLR1s_angspd: dc.w 0
  5036. PLR1s_xoff: dc.l 0
  5037. PLR1s_yoff: dc.l 0
  5038. PLR1s_yvel: dc.l 0
  5039. PLR1s_zoff: dc.l 0
  5040. PLR1s_tyoff: dc.l 0
  5041. PLR1s_xspdval: dc.l 0
  5042. PLR1s_zspdval: dc.l 0
  5043. PLR1s_Zone: dc.w 0
  5044. PLR1s_Roompt: dc.l 0
  5045. PLR1s_OldRoompt: dc.l 0
  5046. PLR1s_PointsToRotatePtr: dc.l 0
  5047. PLR1s_ListOfGraphRooms: dc.l 0
  5048. PLR1s_oldxoff: dc.l 0
  5049. PLR1s_oldzoff: dc.l 0
  5050.  
  5051.  ds.w 4
  5052.  
  5053. PLR2: dc.b $0
  5054.  even
  5055. PLR2_cosval: dc.w 0
  5056. PLR2_sinval: dc.w 0
  5057. PLR2_angpos: dc.w 0
  5058. PLR2_angspd: dc.w 0
  5059. PLR2_xoff: dc.l 0
  5060. PLR2_yoff: dc.l 0
  5061. PLR2_yvel: dc.l 0
  5062. PLR2_zoff: dc.l 0
  5063. PLR2_tyoff: dc.l 0
  5064. PLR2_xspdval: dc.l 0
  5065. PLR2_zspdval: dc.l 0
  5066. PLR2_Zone: dc.w 0
  5067. PLR2_Roompt: dc.l 0
  5068. PLR2_OldRoompt: dc.l 0
  5069. PLR2_PointsToRotatePtr: dc.l 0
  5070. PLR2_ListOfGraphRooms: dc.l 0
  5071. PLR2_ForwardSpd: dc.w 0
  5072.  
  5073. liftanimtab:
  5074.  
  5075. endliftanimtab:
  5076.  
  5077. glassball:
  5078. ; incbin "glassball.inc"
  5079. endglass
  5080. glassballpt: dc.l glassball
  5081.  
  5082. rndtab: ; incbin "randfile"
  5083. endrnd: 
  5084.  
  5085. brightanimtab:
  5086.  dcb.w 200,20
  5087.  dc.w 5
  5088.  dc.w 10,20
  5089.  dc.w 5
  5090.  dcb.w 30,20
  5091.  dc.w 7,10,10,5,10,0,5,6,5,6,5,6,5,6,0
  5092.  dcb.w 40,0
  5093.  dc.w 1,2,3,2,3,2,3,2,3,2,3,2,3,0
  5094.  dcb.w 300,0
  5095.  dc.w 1,0,1,0,2,2,2,5,5,5,5,5,5,5,5,5,6,10
  5096.  dc.w -1
  5097.  
  5098. Roompt: dc.l 0
  5099. OldRoompt: dc.l 0
  5100.  
  5101. *****************************************************************
  5102.  *
  5103.  include "AB3:source/LevelData2.demo"
  5104.  *
  5105. *****************************************************************
  5106.  
  5107.  
  5108. wallpt: dc.l 0
  5109. floorpt: dc.l 0
  5110.  
  5111. Rotated:
  5112.  ds.l 800 
  5113. ObjRotated:
  5114.  ds.l 800
  5115.  
  5116. OnScreen:
  5117.  ds.l 800 
  5118.  
  5119. startwait: dc.w 0
  5120. endwait: dc.w 0
  5121.  
  5122. Faces: incbin "faces2raw"
  5123.  
  5124. *******************************************************************
  5125.  
  5126. consttab:
  5127.  incbin "constantfile"
  5128.  
  5129. *******************************************************************
  5130.  
  5131. darkentab: incbin "darkenedcols"
  5132. brightentab: incbin "brightenfile"
  5133. WorkSpace:
  5134.  ds.l 8192 
  5135. waterfile: incbin "waterfile"
  5136.  
  5137. RECORDPTR: dc.l RECORDBUFFER
  5138.  
  5139. RECORDBUFFER: incbin "RECORDING"
  5140.  
  5141. Font: incbin "stenfontraw"
  5142.  ds.b 5*24
  5143. charmap: incbin "charmap"
  5144.  
  5145.  SECTION ffff,CODE_C
  5146.  
  5147. nullspr: dc.l 0
  5148.  
  5149.  cnop 0,8
  5150. borders:
  5151.  incbin "borderspr"
  5152.  
  5153. null: ds.w 500
  5154. null2: ds.w 500
  5155. null3: ds.w 500
  5156. null4: ds.w 500
  5157.  
  5158.  
  5159. Blurbfield:
  5160.  
  5161.  dc.w bpl1ptl
  5162. bl1l: dc.w 0
  5163.  dc.w bpl1pth
  5164. bl1h: dc.w 0
  5165.  
  5166.  dc.w diwstart,$2c81
  5167.  dc.w diwstop,$1cc1
  5168.  dc.w ddfstart,$38
  5169.  dc.w ddfstop,$b8
  5170.  dc.w bplcon0,$9201
  5171.  dc.w bplcon1,0
  5172.  dc.w $106,$c40
  5173. blcols:
  5174.  dc.w col0,0
  5175.  dc.w col1,$fff
  5176.  
  5177.  dc.w $108,0
  5178.  dc.w $10a,0
  5179.  
  5180.  dc.w $ffff,$fffe
  5181.  dc.w $ffff,$fffe
  5182.  
  5183. bigfield:    
  5184.                 ; Start of our copper list.
  5185.  
  5186.  dc.w dmacon,$8020
  5187.  dc.w intreq,$8011
  5188.  dc.w $1fc,$7
  5189.  dc.w diwstart
  5190. winstart: dc.w $2cb1
  5191.  dc.w diwstop
  5192. winstop: dc.w $2c91
  5193.  dc.w ddfstart
  5194. fetchstart: dc.w $48
  5195.  dc.w ddfstop
  5196. fetchstop: dc.w $88
  5197.  
  5198.  dc.w spr0ptl
  5199. s0l:
  5200.  dc.w 0
  5201.  dc.w spr0pth
  5202. s0h:
  5203.  dc.w 0
  5204.  dc.w spr1ptl
  5205. s1l:
  5206.  dc.w 0
  5207.  dc.w spr1pth
  5208. s1h:
  5209.  dc.w 0
  5210.  dc.w spr2ptl
  5211. s2l:
  5212.  dc.w 0
  5213.  dc.w spr2pth
  5214. s2h:
  5215.  dc.w 0
  5216.  dc.w spr3ptl
  5217. s3l:
  5218.  dc.w 0
  5219.  dc.w spr3pth
  5220. s3h:
  5221.  dc.w 0
  5222.  dc.w spr4ptl
  5223. s4l:
  5224.  dc.w 0
  5225.  dc.w spr4pth
  5226. s4h:
  5227.  dc.w 0
  5228.  dc.w spr5ptl
  5229. s5l:
  5230.  dc.w 0
  5231.  dc.w spr5pth
  5232. s5h:
  5233.  dc.w 0
  5234.  dc.w spr6ptl
  5235. s6l:
  5236.  dc.w 0
  5237.  dc.w spr6pth
  5238. s6h:
  5239.  dc.w 0
  5240.  dc.w spr7ptl
  5241. s7l:
  5242.  dc.w 0
  5243.  dc.w spr7pth
  5244. s7h:
  5245.  dc.w 0
  5246.  
  5247.  dc.w $106,$8c42
  5248.  dc.w col0,$0
  5249.  dc.w $106,$c42
  5250.  dc.w col0,0
  5251.  
  5252.  dc.w $106,$c42
  5253.  incbin "borderpal"
  5254.  
  5255.  dc.w bplcon0,$7201
  5256.  dc.w bplcon1
  5257. smoff:
  5258.  dc.w $0
  5259.  
  5260.  dc.w $108
  5261. modulo: dc.w -24
  5262.  dc.w $10a,-24
  5263.  
  5264.  dc.w bpl1pth
  5265. pl1h
  5266.  dc.w 0
  5267.  
  5268.  dc.w bpl1ptl
  5269. pl1l
  5270.  dc.w 0
  5271.  
  5272.  dc.w bpl2pth
  5273. pl2h
  5274.  dc.w 0
  5275.  
  5276.  dc.w bpl2ptl
  5277. pl2l
  5278.  dc.w 0
  5279.  
  5280.  dc.w bpl3pth
  5281. pl3h
  5282.  dc.w 0
  5283.  
  5284.  dc.w bpl3ptl
  5285. pl3l
  5286.  dc.w 0
  5287.  
  5288.  dc.w bpl4pth
  5289. pl4h
  5290.  dc.w 0
  5291.  
  5292.  dc.w bpl4ptl
  5293. pl4l
  5294.  dc.w 0
  5295.  
  5296.  dc.w bpl5pth
  5297. pl5h
  5298.  dc.w 0
  5299.  
  5300.  dc.w bpl5ptl
  5301. pl5l
  5302.  dc.w 0
  5303.  
  5304.  dc.w bpl6pth
  5305. pl6h
  5306.  dc.w 0
  5307.  
  5308.  dc.w bpl6ptl
  5309. pl6l
  5310.  dc.w 0
  5311.  
  5312.  dc.w bpl7pth
  5313. pl7h
  5314.  dc.w 0
  5315.  
  5316.  dc.w bpl7ptl
  5317. pl7l
  5318.  dc.w 0
  5319.  
  5320.  
  5321.  dc.w $1001,$ff00
  5322.  dc.w intreq,$11
  5323. yposcop:
  5324.  dc.w $2a11,$fffe
  5325.  dc.w $8a,0
  5326.  
  5327.  ds.l 104*12
  5328.  
  5329. colbars:
  5330. val SET $2a
  5331.  dcb.l 104*scrheight,$1fe0000
  5332.  dc.w $106,$c42
  5333.  
  5334.  dc.w $80
  5335. pch1:
  5336.  dc.w 0
  5337.  dc.w $82
  5338. pcl1:
  5339.  dc.w 0 
  5340.  dc.w $88,0
  5341.  
  5342.  dc.w $ffff,$fffe       ; End copper list.
  5343.  
  5344.  ds.l 104*12
  5345.  
  5346. colbars2:
  5347. val SET $2a
  5348.  dcb.l 104*scrheight,$1fe0000
  5349.  
  5350.  dc.w $106,$c42
  5351.  
  5352.  dc.w $80
  5353. pch2:
  5354.  dc.w 0
  5355.  dc.w $82
  5356. pcl2:
  5357.  dc.w 0
  5358.  
  5359.  dc.w $88,0
  5360.  
  5361.  dc.w $ffff,$fffe       ; End copper list.
  5362.  
  5363.  ds.l 104*10
  5364.  
  5365. old: dc.l 0
  5366.  
  5367. PanelCop:
  5368.  
  5369.  dc.w bplcon0,1
  5370.  
  5371.  dc.w $106,$c42
  5372.  dc.w $10c,1
  5373.  dc.w $10e,0
  5374.  dc.w $1fc,$0
  5375.  dc.w diwstart,$2c81
  5376.  dc.w diwstop,$2cc1
  5377.  dc.w ddfstart,$3c
  5378.  dc.w ddfstop,$d4
  5379.  
  5380. ; incbin "Panelcols"
  5381.  
  5382.  dc.w $108,0
  5383.  dc.w $10a,0
  5384.  
  5385.  dc.w bpl1pth
  5386. p1h
  5387.  dc.w 0
  5388.  
  5389.  dc.w bpl1ptl
  5390. p1l
  5391.  dc.w 0
  5392.  
  5393.  dc.w bpl2pth
  5394. p2h
  5395.  dc.w 0
  5396.  
  5397.  dc.w bpl2ptl
  5398. p2l
  5399.  dc.w 0
  5400.  
  5401.  dc.w bpl3pth
  5402. p3h
  5403.  dc.w 0
  5404.  
  5405.  dc.w bpl3ptl
  5406. p3l
  5407.  dc.w 0
  5408.  
  5409.  dc.w bpl4pth
  5410. p4h
  5411.  dc.w 0
  5412.  dc.w bpl4ptl
  5413. p4l
  5414.  dc.w 0
  5415.  dc.w bpl5pth
  5416. p5h
  5417.  dc.w 0
  5418.  dc.w bpl5ptl
  5419. p5l
  5420.  dc.w 0
  5421.  
  5422.  dc.w $80
  5423. och:
  5424.  dc.w 0
  5425.  dc.w $82
  5426. ocl:
  5427.  dc.w 0
  5428.  
  5429. ; dc.w $106,$2c40
  5430. ; incbin "borderpal"
  5431. ; dc.w $10c,$3
  5432.  dc.w $106,$c40
  5433.  
  5434.  dc.w $cf01,$ff00
  5435.  dc.w bplcon0
  5436. Panelcon: dc.w $5201
  5437.  dc.w $180,0
  5438.  dc.w $182
  5439. textcol: dc.w $0
  5440.  
  5441.  dc.w $ffff,$fffe
  5442.  
  5443.  dc.w $f801,$ff00
  5444.  dc.w col1,$50
  5445.  dc.w $f901,$ff00
  5446.  dc.w col1,$90
  5447.  dc.w $fa01,$ff00
  5448.  dc.w col1,$f0
  5449.  dc.w $fb01,$ff00
  5450.  dc.w col1,$f0
  5451.  dc.w $fc01,$ff00
  5452.  dc.w col1,$90
  5453.  dc.w $fd01,$ff00
  5454.  dc.w col1,$50
  5455.  
  5456.  dc.w $fe01,$ff00
  5457.  dc.w col1,$fff
  5458.  
  5459.  dc.w $ffdf,$fffe
  5460.  dc.w $a01,$ff00
  5461.  dc.w bplcon0,$201
  5462.  
  5463.  incbin "faces2cols"
  5464.  dc.w bpl1pth
  5465. f1h
  5466.  dc.w 0
  5467.  
  5468.  dc.w bpl1ptl
  5469. f1l
  5470.  dc.w 0
  5471.  
  5472.  dc.w bpl2pth
  5473. f2h
  5474.  dc.w 0
  5475.  
  5476.  dc.w bpl2ptl
  5477. f2l
  5478.  dc.w 0
  5479.  
  5480.  dc.w bpl3pth
  5481. f3h
  5482.  dc.w 0
  5483.  
  5484.  dc.w bpl3ptl
  5485. f3l
  5486.  dc.w 0
  5487.  
  5488.  dc.w bpl4pth
  5489. f4h
  5490.  dc.w 0
  5491.  dc.w bpl4ptl
  5492. f4l
  5493.  dc.w 0
  5494.  
  5495.  dc.w bpl5pth
  5496. f5h
  5497.  dc.w 0
  5498.  dc.w bpl5ptl
  5499. f5l
  5500.  dc.w 0
  5501.  
  5502.  dc.w $0c01,$ff00
  5503.  dc.w bplcon0,$5201
  5504.   
  5505.  dc.w $ffff,$fffe
  5506.  
  5507.  cnop 0,64
  5508. FacePlace:
  5509.  ds.l 6*32*5
  5510.  
  5511.  
  5512. ********************************************
  5513. * Stuff you don't have to worry about yet. *
  5514. ********************************************
  5515.  
  5516. closeeverything:
  5517.  
  5518.  move.l #$dff000,a6
  5519.  move.l old,$dff080     ; Restore old copper list.
  5520.  move.l old,d0
  5521.  move.w d0,ocl
  5522.  swap d0
  5523.  move.w d0,och
  5524.  move.w #$8020,dmacon(a6)
  5525.  move.w #$f,dmacon(a6)
  5526.  move.l saveit,$6c.w
  5527.  move.l OLDKINT,$68.w
  5528.  move.w saveinters,d0
  5529.  or.w #$c000,d0
  5530.  move.w d0,intena(a6)
  5531.  clr.w $dff0a8
  5532.  clr.w $dff0b8
  5533.  clr.w $dff0c8
  5534.  clr.w $dff0d8
  5535.  
  5536. ; move.w #3,d0
  5537. ;nonewvbl
  5538. ; btst #5,intreqrl(a6)
  5539. ; beq.s nonewvbl
  5540. ; move.w #$20,intreq(a6)
  5541. ; dbra d0,nonewvbl
  5542.  
  5543. ; move.l oldview,a1
  5544. ; move.l a1,d0
  5545. ; move.l gfxbase,a6
  5546. ; jsr -$de(a6)
  5547.  
  5548.  move.l gfxbase,d0
  5549.  move.l d0,a1
  5550.  move.l 4.w,a6
  5551.  jsr CloseLib(a6)
  5552.  
  5553.  cmp.b #'t',option+1
  5554.  beq.s leaveold
  5555.  move.w #$f8e,$dff1dc
  5556. leaveold:
  5557.  
  5558.  rte
  5559.  
  5560. gfxbase: dc.l 0
  5561. oldview: dc.l 0
  5562.  
  5563. stuff:
  5564.  
  5565.     Lea    gfxname(pc),a1    
  5566.     Moveq.l    #0,d0
  5567.     Move.l    $4.w,a6    
  5568.     Jsr    -$228(a6)
  5569.     Move.l     d0,gfxbase
  5570.     Move.l    d0,a6                Use As Base Reg
  5571.     Move.l    34(a6),oldview
  5572.     move.l 38(a6),old
  5573.  
  5574.  jmp endstuff
  5575.  
  5576. gfxname dc.b "graphics.library",0
  5577.  
  5578.  even
  5579.  
  5580.  
  5581.  cnop 0,64
  5582.  
  5583. Panel:
  5584.  incbin "PanelRaw"
  5585.  
  5586. Blurb:
  5587. ; incbin "blurbpic"
  5588.  
  5589. TimerScr: ds.b 80*96
  5590.  
  5591. scrntab:
  5592.  ds.b 16
  5593. val SET 32
  5594.  REPT 96
  5595.  dc.b val,val,val
  5596. val SET val+1
  5597.  ENDR
  5598.  ds.b 16
  5599.  
  5600.  cnop 0,64
  5601. scrn:
  5602.  
  5603.  dcb.l 8,$33333333
  5604.  dc.l 0
  5605.  dc.l 0
  5606.  
  5607.  dcb.l 8,$0f0f0f0f
  5608.  dc.l 0
  5609.  dc.l 0
  5610.  
  5611.  dcb.l 8,$00ff00ff
  5612.  dc.l 0
  5613.  dc.l 0
  5614.  
  5615.  dcb.l 8,$0000ffff
  5616.  dc.l 0
  5617.  dc.l 0
  5618.  
  5619.  dc.l 0,-1,0,-1,0,-1,0,-1
  5620.  dc.l 0
  5621.  dc.l 0
  5622.  
  5623.  dc.l -1,-1,0,0,-1,-1,0,0
  5624.  dc.l 0
  5625.  dc.l 0
  5626.  
  5627.  dc.l 0,0,-1,-1,-1,-1,-1,-1
  5628.  dc.l 0
  5629.  dc.l 0
  5630.  
  5631. NumTimes: dc.l 0
  5632. TimeCount: dc.l 0
  5633. oldtime: dc.l 0
  5634. counting: dc.b 0
  5635. oktodisplay: dc.b 0
  5636.  
  5637. INITTIMER:
  5638.  move.l #0,TimeCount
  5639.  move.l #0,NumTimes
  5640.  rts
  5641.  
  5642. STARTCOUNT:
  5643.  move.l d0,-(a7)
  5644.  move.l $dff004,d0
  5645.  and.l #$1ffff,d0
  5646.  move.l d0,oldtime
  5647.  st counting
  5648.  move.l (a7)+,d0
  5649.  rts
  5650.  
  5651. STOPCOUNT:
  5652.  move.l d0,-(a7)
  5653.  move.l $dff004,d0
  5654.  and.l #$1ffff,d0
  5655.  
  5656.  sub.l oldtime,d0
  5657.  cmp.l #-256,d0
  5658.  bge.s okcount
  5659.  add.l #313*256,d0
  5660. okcount:
  5661.  add.l d0,TimeCount
  5662.  addq.l #1,NumTimes
  5663.  clr.b counting
  5664.  move.l (a7)+,d0
  5665.  rts
  5666.  
  5667. STOPCOUNTNOADD:
  5668.  move.l d0,-(a7)
  5669.  move.l $dff004,d0
  5670.  and.l #$1ffff,d0
  5671.  
  5672.  sub.l oldtime,d0
  5673.  cmp.l #-256,d0
  5674.  bge.s okcount2
  5675.  add.l #313*256,d0
  5676. okcount2:
  5677.  add.l d0,TimeCount
  5678.  clr.b counting
  5679.  move.l (a7)+,d0
  5680.  rts
  5681.  
  5682. maxbot: dc.w 0
  5683. tstneg: dc.l 0
  5684.  
  5685. STOPTIMER:
  5686.  st oktodisplay
  5687.  rts
  5688.  
  5689. digits: incbin "numbers.inc"
  5690.  
  5691.  
  5692.  Section Sounds,CODE_C
  5693.  
  5694. Scream: incbin "ab3:sounds/Scream"
  5695.  ds.w 100
  5696. EndScream:
  5697. LowScream: incbin "ab3:sounds/LowScream"
  5698.  ds.w 100
  5699. EndLowScream:
  5700. BaddieGun: incbin "ab3:sounds/BaddieGun"
  5701. EndBaddieGun:
  5702. bass: incbin "ab3:sounds/DRUMLOOP1b"
  5703. bassend:
  5704. bass2: incbin "ab3:sounds/DRUMLOOP2b"
  5705. bass2end:
  5706. bass3: incbin "ab3:sounds/DRUMLOOP3b"
  5707. bass3end:
  5708. Shoot: incbin "ab3:sounds/fire!"
  5709. EndShoot:
  5710. Munch: incbin "ab3:sounds/munch"
  5711. EndMunch:
  5712. PooGun: incbin "ab3:sounds/shoot.dm"
  5713. EndPooGun:
  5714. Collect: incbin "ab3:sounds/collect"
  5715. EndCollect:
  5716. DoorNoise: incbin "ab3:sounds/newdoor"
  5717. EndDoorNoise:
  5718. Stomp: incbin "ab3:sounds/footstep3"
  5719. EndStomp:
  5720. SwitchNoise: incbin "ab3:sounds/switch"
  5721. EndSwitch:
  5722.